C# 基于替换规则修改XDocument

C# 基于替换规则修改XDocument,c#,xml,C#,Xml,我有一个如下所示的XML文档 <root> <Product> <ProductName attr1="asdf"> <Feature1 attr1="asdf"> <Feature2 /> </Feature1> <Feature3 attr1="asdf" attr2="qwer" /> </ProductName> &l

我有一个如下所示的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>

...
???
所以基本上,有不同类型的命令

获取
元素的内容并将其添加到
元素中
with
mode=“Add”
获取
元素的内容,并根据
product
属性将其添加到
标记中

使用
mode=“Replace”
是一个棘手的问题。我需要找到一种方法来获取
元素的内容,并使用它替换元素或属性的内容,可能基于
元素中的
路径
属性


有什么想法或建议吗?是否有一种基于路径在XDocument中查找XElement的方法?

您没有提到此转换将发生的环境:XML的内联处理?ETL

您可以开发一个XML转换模板(XMLT)(以
为条件),将新元素/属性添加到功能中。此模板可以内联应用。在网上有很多这样做的例子——谷歌是你的朋友

您还可以编写一个应用程序,使用.Net的Linq或System.XML之类的框架库打开和操作XML树。可以说更容易,但需要外部处理


XPath呢?它是一种具有过滤功能的路径表达式,因此我们不仅可以基于元素的路径,还可以基于元素的值、元素的属性值等匹配XML文档的任何特定部分

例如,您可以传递以下XPath以替换现有的属性为attr1的
等于
“asdf”


.....
我们可以使用扩展方法,使用XPath表达式作为参数,从
XDocument
获取特定的
XElement
。只需将
path
属性值传递给此方法,它就可以找到正确的元素

供参考:


我需要引用/使用什么才能使用XPathSelectElement()?
使用System.Xml.XPath
,请参阅此答案中的MSDN链接,命名空间和程序集信息就在那里。如果我将
XPathSelectElement()
与示例中的路径一起使用,它会选择
节点还是
@attr1
属性?它会选择
,作为路径最后一部分提到的节点(在
[]
仅是对应节点的过滤器)
<Feature product="ProductName" mode="Replace"
         path="//Product/ProductName[@attr1='asdf']">
  .....
</Feature>