我有以下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的一部分。请建议我这样做的方法!
谢谢!
答案 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
此致