0

私は次のHTMLマークアップを持っています

<p>xxxx</p>
 <pre>xxx</pre>
 <p>xxxx</p>
 <pre>yyy</pre>

これを次のように変更できるようにする必要があります。

<p>xxxx</p>
 <pre>ABC xxx ABC</pre>
 <p>xxxx</p>
 <pre>ABC yyy ABC </pre>

私は使用する提案がありました:

   var loDoc = XDocument.Parse(lcHTML);
   foreach (XElement loElement in loDoc.Descendants("pre"))

これはすべてのpre要素を抽出しますが、物事を結び付けて元の文字列にコードを再挿入する方法を提供しません。

必要なコード変更を行うことができる別の方法はありますか?分割と分割を使用することを考えていました<pre>..</pre>が、内部のコードを置き換える必要があるため、実際には必要なものが得られませんでした。<pre>...</pre>

4

3 に答える 3

1

1 つの可能性はXDocumentを使用することですが、有効な XHTML である必要があり、ルート ノードを導入する必要があります。

public class Program
{
    static void Main()
    {
        var doc = XDocument.Parse(
            @"<html>
              <p>xxxx</p>
              <pre>xxx</pre>
              <p>xxxx</p>
              <pre>yyy</pre>
            </html>"
        );
        foreach (var pre in doc.Descendants("pre"))
        {
            pre.Value = string.Format("ABC {0} ABC", pre.Value);         
        }
        Console.WriteLine(doc);
    }
}

もう 1 つの可能性は、Html Agility Packを使用することです。

public class Program
{
    static void Main()
    {
        var doc = new HtmlDocument();
        doc.LoadHtml(
            @"<p>xxxx</p>
              <pre>xxx</pre>
              <p>xxxx</p>
              <pre>yyy</pre>"
        );
        foreach (var pre in doc.DocumentNode.Descendants("pre"))
        {
            pre.InnerHtml = string.Format("ABC {0} ABC", pre.InnerHtml);         
        }
        Console.WriteLine(doc.DocumentNode.OuterHtml);
    }
}
于 2012-10-05T06:18:49.137 に答える
0

xml の代わりに文字列を使用するのはどうですか?

String xmlString = ... \\ get string representation from somewhere
xmlString = xmlString.Replace( "<pre>", "<pre>ABC " ); 
xmlString = xmlString.Replace( "</pre>", " ABC </pre>" ); 
于 2012-10-05T06:24:05.730 に答える
0

このリンクから XML Doc 要素を取得するHow to read HTML as XML?

doc 要素を使用して、試してください

XmlElement root = doc.DocumentElement; 

XmlNodeList nodes = root.SelectNodes("pre"); 

foreach (XmlNode node in nodes) {
   node.value = "ABC" + node.value + "ABC";
} 
于 2012-10-05T06:18:54.973 に答える