C# 基于替换规则修改XDocument
我有一个如下所示的XML文档C# 基于替换规则修改XDocument,c#,xml,C#,Xml,我有一个如下所示的XML文档 <root> <Product> <ProductName attr1="asdf"> <Feature1 attr1="asdf"> <Feature2 /> </Feature1> <Feature3 attr1="asdf" attr2="qwer" /> </ProductName> &l
<root>
<Product>
<ProductName attr1="asdf">
<Feature1 attr1="asdf">
<Feature2 />
</Feature1>
<Feature3 attr1="asdf" attr2="qwer" />
</ProductName>
</Product>
</root>
我需要根据XML格式的命令来更新它,比如
<XmlCommands>
<AddProduct>
<Product>
...
</Product>
</AddProduct>
<AddFeature>
<Feature product="ProductName" mode="Add">
<Feature4 attr1="zxcv"/>
</Feature>
<Feature product="ProductName" path="???" mode="Replace">
???
</Feature>
</AddFeature>
</XmlCommands>
...
???
所以基本上,有不同类型的命令
获取
元素的内容并将其添加到
元素中
withmode=“Add”
获取
元素的内容,并根据product
属性将其添加到
标记中
使用mode=“Replace”
的
是一个棘手的问题。我需要找到一种方法来获取
元素的内容,并使用它替换元素或属性的内容,可能基于
元素中的路径
属性
有什么想法或建议吗?是否有一种基于路径在XDocument中查找XElement的方法?您没有提到此转换将发生的环境:XML的内联处理?ETL 您可以开发一个XML转换模板(XMLT)(以
为条件),将新元素/属性添加到功能中。此模板可以内联应用。在网上有很多这样做的例子——谷歌是你的朋友
您还可以编写一个应用程序,使用.Net的Linq或System.XML之类的框架库打开和操作XML树。可以说更容易,但需要外部处理
嗯 XPath呢?它是一种具有过滤功能的路径表达式,因此我们不仅可以基于元素的路径,还可以基于元素的值、元素的属性值等匹配XML文档的任何特定部分 例如,您可以传递以下XPath以替换现有的属性为attr1的
等于“asdf”
:
.....
我们可以使用扩展方法,使用XPath表达式作为参数,从XDocument
获取特定的XElement
。只需将path
属性值传递给此方法,它就可以找到正确的元素
供参考:
使用System.Xml.XPath
,请参阅此答案中的MSDN链接,命名空间和程序集信息就在那里。如果我将XPathSelectElement()
与示例中的路径一起使用,它会选择
节点还是@attr1
属性?它会选择
,作为路径最后一部分提到的节点(在[]
仅是对应节点的过滤器)
<Feature product="ProductName" mode="Replace"
path="//Product/ProductName[@attr1='asdf']">
.....
</Feature>