質問

私はMicrosoft Visual C#2008 Expressで働いています。

文字列があり、文字列の内容は次のとおりです。 "This is my <myTag myTagAttrib="colorize">awesome</myTag> string."

私は自分が「素晴らしい」という言葉に何かをしたいと自分自身に言っています。

このタグが存在し、その属性を取得することを検出するために、C#の最良の方法は何ですか?私は働きました 少し XelementsなどがC#でありますが、主にXMLファイルの内外を読むことに関係しています。

ありがとう!

-Deena

役に立ちましたか?

解決

別の解決策:

var myString = "This is my <myTag myTagAttrib='colorize'>awesome</myTag> string.";
try
{
    var document = XDocument.Parse("<root>" + myString + "</root>");
    var matches = ((System.Collections.IEnumerable)document.XPathEvaluate("myTag|myTag2")).Cast<XElement>();
    foreach (var element in matches)
    {
        switch (element.Name.ToString())
        {
            case "myTag":
                //do something with myTag like lookup attribute values and call other methods
                break;
            case "myTag2":
                //do something else with myTag2
                break;
        }
    }
}
catch (Exception e)
{
    //string was not not well formed xml
}

また、複数の要素で複数の属性を解析したいDabblernlへのコメントを考慮しました。

他のヒント

正規表現でXMLを抽出し、抽出されたXML文字列をXelementにロードして、そこから移動できます。

string text=@"This is my<myTag myTagAttrib='colorize'>awesome</myTag> text.";
Match match=Regex.Match(text,@"(<MyTag.*</MyTag>)");
string xml=match.Captures[0].Value;
XElement element=XElement.Parse(xml);
XAttribute attribute=element.Attribute("myTagAttrib");
if(attribute.Value=="colorize") DoSomethingWith(element.Value);// Value=awesome

このコードは、MyTag要素が見つからなかった場合、例外をスローしますが、次の行を挿入することで改善できます。

if(match.Captures.Count!=0)
{...}

文字列がmyTagタグ以上のものを保持できれば、さらに興味深いものになります...

文字列(テキストコンテンツ)、タグ、属性を切り替えるため、私はあなたの例について少し混乱しています。しかし、私はあなたが望むのはxpathだと思います。

したがって、XMLストリームが次のようになる場合:

u003Cadeena/>u003Cparent>u003Cchild x="this is my awesome string">これは別の素晴らしい文字列ですu003Cchild/>u003Cadeena/>

属性を見つけるために、このように見えるXPath式を使用します。

// child/@x

そして、このように、子タグの下にテキスト値を見つけます。

//子

私はJava開発者なので、これを行うために使用するXMLライブラリがわかりません。ただし、XMLファイルを読んでからXPathを使用して値を引き出すことにより、W3Cドキュメントクラスインスタンスを作成するには、DOMパーサーが必要です。

良いことがあります W3CスクールのXpathチュートリアル 必要な場合。

アップデート:

XMLストリームを文字列として既に持っていると言っている場合、答えはファイルからではなく、文字列自体からそれを読むことです。 Javaには、それぞれバイトと文字のストリームを処理するinputstreamと読者と呼ばれる抽象化があります。ソースはファイル、文字列などにすることができます。C#DOM APIを確認して、同様のものがあるかどうかを確認します。文字列をパーサーに渡し、操作できるDOMオブジェクトを返します。

入力は順調に形成されていないため、組み込みのXMLライブラリのいずれかで解析することはできません。よく形成されたピースを抽出するために正規表現が必要です。あなたはおそらく、より寛容なHTMLパーサーの1つを次のように使用できます htmlagilitypack CodePlexで。

XmlTextReader XMLフラグメントを特別なコンストラクターで解析できます 五月 この状況で助けてください。しかし、私はそれについて前向きではありません。

ここに詳細な記事があります:

http://geekswithblogs.net/kobush/archive/2006/04/20/75717.aspx

これは、Regexを使用して、あらゆるタイプのXMLを一致させる私のソリューションです。C#XMLを検出するより良い方法は?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top