0

我有以下 xml 文档

<Node id="1" name="name1" autoplayTrailer="false" visible="true" bgimages="false">
      <Text>
        <title id="2"  type="text" hideineditor="false" visible="true"><![CDATA[Link]]></title>
        <sections id="3"  default="consideration">         
          <songs id="4"  type="text" hideineditor="false" enabled="true" visible="true">
            <![CDATA[
              <div class="ThumbContainer">
                Some text here
              </div>
            ]]>         
            <songsTitle><![CDATA[sometexthtml here]]></songsTitle>
          </songs>
           </sections>
     </Text>
</Node>

我想content/node一一阅读并修改CDATA内容并将xml写入光盘。

问题是我无法为<songs>节点编写 CData,因为它在节点内有另一个节点<songTitle>而不关闭</song>节点是否可以用 CData 编写节点,而 CData 有另一个节点跟随 CData 内容?

4

2 回答 2

0

这是您要创建的输出吗?

此示例使用 XmlTextWriter API 输出“歌曲”元素下的 CData 和“其他元素”。

using System;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace WriteCData
{
class Program
{
    static void Main(string[] args)
    {
        // some output to write to
        XmlTextWriter xtw = new XmlTextWriter(@"c:\temp\CDataTest.xml", null);

        // start at 'songs' element
        xtw.WriteStartElement("songs");
        xtw.WriteCData("<div class='ThumbContainer'>Some text here</div>");
        xtw.WriteStartElement("songsTitle");
        xtw.WriteCData("sometexthtml here");
        xtw.WriteEndElement();      // end "songTitle"
        xtw.WriteEndElement();      // end "songs"

        xtw.Flush();            // clean up
        xtw.Close();
    }
}
}

输出:

<songs>
<![CDATA[<div class='ThumbContainer'>Some text here</div>]]>
<songsTitle><![CDATA[sometexthtml here]]></songsTitle>
</songs>

这个想法是用您在问题中提到的源文档中读取的值替换示例中使用的静态文本。

于 2019-12-09T10:48:52.210 回答
0

尝试 xml linq :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            foreach (XElement node in doc.Descendants("Node"))
            {
                XElement songs = node.Descendants("songs").FirstOrDefault();
                XCData child = (XCData)songs.FirstNode;
                string childStr = child.ToString();
                childStr = childStr.Replace("Some text here", "Some text there");
                child.ReplaceWith(childStr);
            }
        }
    }
}
于 2019-12-09T06:48:40.427 回答