文字列内のXMLタグを使用するにはどうすればよいですか?
質問
私は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を検出するより良い方法は?