替换 XML 中的属性值(属性路径变量)
Replace attribute value in XML (attrubute path variable)
我正在处理一个 XML 文档,其中包含一个类似于此的结构:
<SW.Blocks.OB ID="$">
<AttributeList>
<ObjectList>
<MultilingualText ID="$" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="$" CompositionName="Items">
<AttributeList>
<Culture>en-US</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
<MultilingualTextItem ID="$" CompositionName="Items">
<AttributeList>
<Culture>nl-NL</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
<MultilingualTextItem ID="$" CompositionName="Items">
<AttributeList>
<Culture>de-DE</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
我正在搜索属性 ID。此属性随处可见。
我已经可以找到那些 ID 的值
XmlTextReader reader = new XmlTextReader(@"Main.xml");
while (reader.Read())
{
reader.MoveToContent();
string test = reader.GetAttribute("ID");
if (test == "$")
{
MessageBox.Show(test);
}
}
但我无法更改它们。
目标:找到 ID,无论在哪里,并将该属性的值替换为 'value'.
谁能帮帮我?我也已经尝试过 Xdocument 和 Xmldocument。想不通了。
使用 xml linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication13
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> ids = doc.Descendants().Where(x => x.Attribute("ID") != null).ToList();
int indNo = 1;
foreach (XElement id in ids)
{
id.Attribute("ID").SetValue(indNo++);
}
}
}
}
我相信使用 XmlDocument
和 XPathNavigator
会更容易
加载文档,然后使用 XPath 在其上导航,然后更改所需的值。
例如::
XmlDocument _soapEnvelopeXml = new XmlDocument();
_soapEnvelopeXml.Load(".xml");
XPathNavigator _xmlNav = _soapEnvelopeXml.FirstChild.CreateNavigator().SelectSingleNode(WebServiceEnum.MAIN_CIL_TAG);
_xmlNav.CreateNavigator().SelectSingleNode("*[local-name()='BUID']").SetValue(buid);
_xmlNav.CreateNavigator().SelectSingleNode("*[local-name()='CustomerNumber']").SetValue(customerNum);
我正在处理一个 XML 文档,其中包含一个类似于此的结构:
<SW.Blocks.OB ID="$">
<AttributeList>
<ObjectList>
<MultilingualText ID="$" CompositionName="Comment">
<ObjectList>
<MultilingualTextItem ID="$" CompositionName="Items">
<AttributeList>
<Culture>en-US</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
<MultilingualTextItem ID="$" CompositionName="Items">
<AttributeList>
<Culture>nl-NL</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
<MultilingualTextItem ID="$" CompositionName="Items">
<AttributeList>
<Culture>de-DE</Culture>
<Text />
</AttributeList>
</MultilingualTextItem>
</ObjectList>
</MultilingualText>
</ObjectList>
</SW.Blocks.OB>
我正在搜索属性 ID。此属性随处可见。 我已经可以找到那些 ID 的值
XmlTextReader reader = new XmlTextReader(@"Main.xml");
while (reader.Read())
{
reader.MoveToContent();
string test = reader.GetAttribute("ID");
if (test == "$")
{
MessageBox.Show(test);
}
}
但我无法更改它们。 目标:找到 ID,无论在哪里,并将该属性的值替换为 'value'.
谁能帮帮我?我也已经尝试过 Xdocument 和 Xmldocument。想不通了。
使用 xml linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication13
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> ids = doc.Descendants().Where(x => x.Attribute("ID") != null).ToList();
int indNo = 1;
foreach (XElement id in ids)
{
id.Attribute("ID").SetValue(indNo++);
}
}
}
}
我相信使用 XmlDocument
和 XPathNavigator
加载文档,然后使用 XPath 在其上导航,然后更改所需的值。
例如::
XmlDocument _soapEnvelopeXml = new XmlDocument();
_soapEnvelopeXml.Load(".xml");
XPathNavigator _xmlNav = _soapEnvelopeXml.FirstChild.CreateNavigator().SelectSingleNode(WebServiceEnum.MAIN_CIL_TAG);
_xmlNav.CreateNavigator().SelectSingleNode("*[local-name()='BUID']").SetValue(buid);
_xmlNav.CreateNavigator().SelectSingleNode("*[local-name()='CustomerNumber']").SetValue(customerNum);