在 XML C# 中将元素转换为其值
Convert element into its value in XML C#
我的 xml 中有一个数组:
现有XML
<data>
<item name="item1">test1</item>
<item name="item2">test2</item>
<item name="item3">test3</item>
</data>
我期望的是:
<data>
<item1>test1</item>
<item2>test2</item>
<item3>test3</item>
</data>
我正在使用 XmlC# 中的文档
var xml = new XmlDocument();
xml.loadXml(myjson string)
...
我的 xml 是上面的现有 Xml。
我怎样才能做到这一点?
谢谢
假设:
- 您很高兴使用 LINQ XML
- 你只有一层元素
...那么就很简单了:
using System;
using System.Linq;
using System.Xml.Linq;
var doc = XDocument.Load("test.xml");
foreach (var element in doc.Root.Elements().ToList())
{
element.ReplaceWith(new XElement(element.Attribute("name").Value, element.Value));
}
Console.WriteLine(doc);
当然,使用 XNode.ReplaceWith
只是一种选择 - 您可以轻松地创建一个 new 文档,例如
using System;
using System.Linq;
using System.Xml.Linq;
var doc = XDocument.Load("test.xml");
var elements = doc.Root
.Elements()
.Select(x => new XElement(x.Attribute("name").Value, x.Value));
var newDoc = new XDocument(new XElement("data", elements));
Console.WriteLine(newDoc);
为了比较,XSLT 解决方案是
<data xmlns:xsl="http://www.w3.org/1999/XSL/Transform version="1.0">
<xsl:for-each select="data/*">
<xsl:element name="{@name}">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:for-each>
</data>
试试这个
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(annotationsxml);
XmlNode node = xmlDoc.SelectSingleNode("data");
var doc = new XmlDocument();
XmlElement usersNode = doc.CreateElement("data");
doc.AppendChild(usersNode);
foreach (XmlNode xn in node)
{
XmlElement userEl = doc.CreateElement(xn.Attributes[0].Value);
userEl.InnerText = xn.InnerText;
usersNode.AppendChild(userEl);
}
结果
<data>
<item1>test1</item1>
<item2>test2</item2>
<item3>test3</item3>
</data>
这是一个 XElement 方法:
XElement doc = XElement.Load("path to file");
var results = doc.Descendants();//if not single level you can add your node name here like .Desendants("data")
results.Attributes().Remove();
int count = 1;
foreach(XElement ele in results)
{
ele.Name = ele.Name + count.ToString();
count++;
}
doc.Save("path to file");
我的 xml 中有一个数组:
现有XML
<data>
<item name="item1">test1</item>
<item name="item2">test2</item>
<item name="item3">test3</item>
</data>
我期望的是:
<data>
<item1>test1</item>
<item2>test2</item>
<item3>test3</item>
</data>
我正在使用 XmlC# 中的文档
var xml = new XmlDocument();
xml.loadXml(myjson string)
...
我的 xml 是上面的现有 Xml。 我怎样才能做到这一点?
谢谢
假设:
- 您很高兴使用 LINQ XML
- 你只有一层元素
...那么就很简单了:
using System;
using System.Linq;
using System.Xml.Linq;
var doc = XDocument.Load("test.xml");
foreach (var element in doc.Root.Elements().ToList())
{
element.ReplaceWith(new XElement(element.Attribute("name").Value, element.Value));
}
Console.WriteLine(doc);
当然,使用 XNode.ReplaceWith
只是一种选择 - 您可以轻松地创建一个 new 文档,例如
using System;
using System.Linq;
using System.Xml.Linq;
var doc = XDocument.Load("test.xml");
var elements = doc.Root
.Elements()
.Select(x => new XElement(x.Attribute("name").Value, x.Value));
var newDoc = new XDocument(new XElement("data", elements));
Console.WriteLine(newDoc);
为了比较,XSLT 解决方案是
<data xmlns:xsl="http://www.w3.org/1999/XSL/Transform version="1.0">
<xsl:for-each select="data/*">
<xsl:element name="{@name}">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:for-each>
</data>
试试这个
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(annotationsxml);
XmlNode node = xmlDoc.SelectSingleNode("data");
var doc = new XmlDocument();
XmlElement usersNode = doc.CreateElement("data");
doc.AppendChild(usersNode);
foreach (XmlNode xn in node)
{
XmlElement userEl = doc.CreateElement(xn.Attributes[0].Value);
userEl.InnerText = xn.InnerText;
usersNode.AppendChild(userEl);
}
结果
<data>
<item1>test1</item1>
<item2>test2</item2>
<item3>test3</item3>
</data>
这是一个 XElement 方法:
XElement doc = XElement.Load("path to file");
var results = doc.Descendants();//if not single level you can add your node name here like .Desendants("data")
results.Attributes().Remove();
int count = 1;
foreach(XElement ele in results)
{
ele.Name = ele.Name + count.ToString();
count++;
}
doc.Save("path to file");