2012-03-30 15 views
1

私はxml文書を取得するためにC#console appを使用しています。今度はxmldocumentがロードされると、私は特定のhrefタグを検索したい:正規表現を使用してxml文書内のテキストを検索して置き換えます

href="/abc/def 

xmlドキュメントの中で検索したい。

このノードが見つかったら、タグを完全に削除してHelloだけを表示します。

<a href="/abc/def">Hello</a> 

私は単純に正規表現を使用してタグを取得できると思います。しかし、誰も私はhrefタグを完全に正規表現を使用して削除することができます教えてください?

+5

この種のものにregexを使用するのは悪い考えです。あなたがHTMLを扱っているなら、HTML Agility Packを使用することをお勧めします... – Yahia

+1

[C#正規表現を使用してXML要素コンテンツを置き換える] :/stackoverflow.com/questions/448376/using-c-sharp-regular-expression-to-replace-xml-element-content) –

+0

@KenWhite - それは全く別の質問です。しかし、私の質問のための助けはありません。 – NoviceMe

答えて

1

xml & html同じ違い:タグ付きコンテンツ。 xmlはより厳密に書式設定されています。このユースケースの場合は 私は変換を使用し、xpathクエリはドキュメントを再構築します。 @ Yahiaが述べているように、タグ付き文書の正規表現は通常、悪い考えです。解析のための正規表現は、一般的な解決策として感情的になるまで複雑です。

0

同様のタスクで最も一般的なテクノロジはXPathです。 (これはXQueryとXSLTの主要コンポーネントでもあります)おそらく次のこともあなたの課題を解決するでしょうか?

root.SelectSingleNode("//a[@href='/abc/def']").InnerText = "Hello"; 
0

あなたは、これはあなたがやろうとしているものですが、あなたが正しい方向に向かって取得するのに十分であるべき場合には本当にわからない

string x = @"<?xml version='1.0'?> 
<EXAMPLE> 
    <a href='/abc/def'>Hello</a> 
</EXAMPLE>"; 

System.Xml.XmlDocument doc = new XmlDocument(); 
doc.LoadXml(x); 
XmlNode n = doc.SelectSingleNode("//a[@href='/abc/def']"); 
XmlNode p = n.ParentNode; 
p.RemoveChild(n); 
System.Xml.XmlNode newNode = doc.CreateNode("element", "a", ""); 
newNode.InnerXml = "Hello"; 
p.AppendChild(newNode); 

を試みることができます。

関連する問題