我有这个XML:
<DiaryEvent name="CreateAppointment">
<appointmentId>e69cbf2e-3de7-e411-9fbf-b161700bfb88</appointmentId>
<originalStartDateTime>2015/04/20 11:15</originalStartDateTime>
<originalEndDateTime>2015/04/20 11:30</originalEndDateTime>
<originalAssignee>DOMAIN\user</originalAssignee>
<initialData><Task id="b1520763-1369-482e-9133-1e40e5b476d0" userName="DOMAIN\user" createdAt="2015/04/20 10:10:25" formTypeId="00000000-0000-0000-0000-000000000000" formTypeName="Client Visit" isScheduled="true" minimumFormVersion="0" xmlns="http://mycompany.com/Schemas/TaskXmlSchema/1.0/">
<DataItems>
<DataItem name="QLCl_Client No" type="int">123</DataItem>
</DataItems>
</Task></initialData>
</DiaryEvent>
我需要从<initialData>
元素中提取XML,unescape它,然后删除命名空间属性。
我使用此成功完成了第一部分:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:copy>
<xsl:value-of select="//initialData" disable-output-escaping="yes"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但是,我无法从输出中删除命名空间属性xmlns="http://mycompany.com/Schemas/TaskXmlSchema/1.0/"
:
<Task id="b1520763-1369-482e-9133-1e40e5b476d0" userName="DOMIAN\user"
createdAt="2015/04/20 10:10:25"
formTypeId="00000000-0000-0000-0000-000000000000"
formTypeName="Client Visit"
isScheduled="true"
minimumFormVersion="0"
xmlns="http://mycompany.com/Schemas/TaskXmlSchema/1.0/">
<DataItems>
<DataItem name="QLCl_Client No" type="int">123</DataItem>
</DataItems>
</Task>
我尝试了各种组合:
<xsl:template match="@xmlns" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
和
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="http://mycompany.com/Schemas/TaskXmlSchema/1.0/"
exclude-result-prefixes="t" >
没有成功。如何删除命名空间属性?
答案 0 :(得分:2)
xmlns:
不是属性节点,它是命名空间节点。因此,@xmlns
永远不会匹配。
如果我理解正确地进行两次单独的转换对您来说不是问题,请按照此标准方法删除输入文档中元素和属性上的所有命名空间。
样式表期望输入您能够生成的中间非转义文档。
XSLT样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" encoding="UTF-8"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="comment()|text()|processing-instruction()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
XML输出
<?xml version="1.0" encoding="UTF-8"?>
<Task id="b1520763-1369-482e-9133-1e40e5b476d0"
userName="DOMIAN\user"
createdAt="2015/04/20 10:10:25"
formTypeId="00000000-0000-0000-0000-000000000000"
formTypeName="Client Visit"
isScheduled="true"
minimumFormVersion="0">
<DataItems>
<DataItem name="QLCl_Client No" type="int">123</DataItem>
</DataItems>
</Task>