根据替换规则修改XDocument
本文关键字:修改 XDocument 规则 替换 | 更新日期: 2023-09-27 18:22:20
我有一个XML文档,看起来像这个
<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>
所以基本上,有不同类型的命令
<AddProduct>
获取<AddProduct>
元素的内容并将其添加到<root>
元素具有mode="Add"
的<AddFeature>
获取<Feature>
元素的内容,并根据product
属性将其添加到<ProductName>
标签
使用<AddFeature>
和mode="Replace"
会变得棘手。我需要找到一种方法来获取<Feature>
元素的内容,并使用它来替换元素或属性的内容,可能基于<Feature>
元素中的path
属性
有什么想法或建议吗?是否有一种方法可以基于路径在XDocument中查找XElement?
XPath怎么样?它是一种富含过滤能力的路径表达式,因此我们可以不仅根据元素的路径,还根据元素的值、元素的属性值等来匹配XML文档的任何特定部分
例如,您可以传递以下XPath来替换属性attr1
等于"asdf"
:的现有<ProductName>
<Feature product="ProductName" mode="Replace"
path="//Product/ProductName[@attr1='asdf']">
.....
</Feature>
我们可以使用XPathSelectElement()
扩展方法,使用XPath表达式作为参数,从XDocument
中获得特定的XElement
。只需将path
属性值传递给此方法,它就可以找到正确的元素。
供参考:
MSDN:XPath示例
w3schools XPath教程
W3C:XML路径语言(XPath)版本1.0
您没有提到发生此转换的环境:XML的内联处理?ETL??
您可以开发一个XML转换模板(XMLT)(以<AddFearture mode=OPTION>
为条件),将新的Elements/Attribute添加到相应的Feature中。这个模板可以内联应用。网上有很多关于如何做到这一点的例子——谷歌是你的朋友!
您还可以编写一个应用程序,使用.Net的Linq或System.XML等框架库来打开和操作XML树。可以说更容易,但需要外部处理。
啊!