如何使用文本值和其他子节点序列化xml节点

时间:2016-11-18 09:19:47

标签: c# .net xml-serialization

我有一个像这样的xml:

<xmlRootNode>
    <levelOneChildNode>
        Some text
        <levelTwoChildNode>
            <levelThreeChildNode>More text</levelThreeChildNode>
        </levelTwoChildNode>
    </levelOneChildNode>
</xmlRootNode>

我无法更改xml格式,因为我的客户想要这种格式。我应该如何创建和装饰&#34; levelOneChildNode&#34;用于正确序列化的类?我不能使用XmlElement或XmlAttribute。除此之外,唯一能做到这一点的方法就是&#34;有些文字&#34;作为XmlElement并制作一个

string.replace("<textNode>", string.empty).replace("</textNode>", string.empty)

使用de serialized xml删除de tag,但这是一个crapy解决方案。

任何想法没有手动xml操作

2 个答案:

答案 0 :(得分:0)

我猜你有两种选择,它们都与手动xml操作有关:

  1. 使用 XmlWriter 逐个写元素。
  2. 填写通用 XmlDocument, 并保存。

答案 1 :(得分:0)

  

设置/检索/追加/创建XmlNotes(值):

//file name
string filename = @"d:\temp\XMLFile2.xml";

//create new instance of XmlDocument
XmlDocument _doc = new XmlDocument();

//load from file
_doc.Load(filename);

// Change text in xml
XmlNode node= _doc.SelectSingleNode("xmlRootNode/levelOneChildNode"); // [index of user node]
node.InnerText = value;
_doc.Save(@"path");

// Retrive value from xml
XmlNode node = _doc.SelectSingleNode("xmlRootNode/levelOneChildNode/levelTwoChildNode/someAttribute");
string value = node.InnerText;

// read or write to more elements
foreach (XmlNode node in doc.SelectNodes("xmlRootNode/levelOneChildNode/levelTwoChildNode"))
{
    string data= node.SelectSingleNode("someAttribute").InnerTex; // get value of someAttribute.

    node.InnerText = value;
} 

// Append Note to levelOneChildNode Note 

// Create second node
XmlNode secondNode = doc.CreateElement("SecondLevelNode");
secondNode .InnerText = "This title is created by code"

XmlNode firstNode= _doc.SelectSingleNode("xmlRootNode/levelOneChildNode");
firstNode.AppendChild(secondNode );
_doc.Save(@"path");
相关问题