需要帮助使用C#编辑XML的属性

时间:2015-10-12 19:17:18

标签: xml c#-4.0

我有以下XML。

 <Account xmlns:i="http://schemas.datacontract.org/2004/07/Uanet>  
<Charges xmlns:a="http://schemas.datacontract.org/2004/07/Urjat">
<a:Charge> 
<a:ChargeActualName>Recent Payment</a:ChargeActualName>                                                    
<a:ChargeAmount>-190.0200</a:ChargeAmount>      <a:ChargeId>recent_payment</a:ChargeId> 
<a:ChargeRatePerUnit i:nil="true"/>  
</a:Charge>
</a:Charges> 
</Account> 

我正在尝试删除所有XML元素的属性i:nil =“true”。我只复制了XML的一部分。请建议我这样做的方法!

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用xslt转换来防止复制某些节点:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:i="http://schemas.datacontract.org/2004/07/Uanet>"
                >
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="@* | node()">
      <xsl:copy>
        <!-- copy all nodes except the i:nil attributes -->
        <xsl:apply-templates select="@*[name()!='i:nil'] | node()"/>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

语言可能看起来很奇怪,但它适用于通用规则。

使用filter.xslt规则将input.xml转换为output.xml。

这是C#启动转换:

XPathDocument myXPathDoc = new XPathDocument("input.xml");
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load("filter.xslt");
XmlTextWriter myWriter = new XmlTextWriter("output.xml", null);
myXslTrans.Transform(myXPathDoc, null, myWriter);

链接到工作解决方案: http://1drv.ms/1QlOdEO

此致