我有一个xml来自我们的遗产'系统。我想删除ExtLineNum标记,但它不在根目录中。
我为我的例子剥离了xml:
<?xml version="1.0" encoding="utf-8"?><ns0:Envelope xmlns:ns0="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"><ns0:Header><ns0:MessageId>{F2BCADA1-AC26-4A0C-BA44-11D75E249150}</ns0:MessageId><ns0:SourceEndpointUser>du.msad\btshostinstance</ns0:SourceEndpointUser><ns0:SourceEndpoint>EDI</ns0:SourceEndpoint><ns0:DestinationEndpoint>JWR</ns0:DestinationEndpoint><ns0:Action>http://schemas.microsoft.com/dynamics/2008/01/services/SalesOrderService/create</ns0:Action><ns0:ConversationId /><ns0:RequestMessageId /></ns0:Header><ns0:Body><ns0:MessageParts><SalesOrder xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SalesTable class="entity">
<ActionCode></ActionCode>
<SalesLine class="entity">
<ExtLineNum></ExtLineNum>
</SalesLine>
</SalesTable>
</SalesOrder></ns0:MessageParts></ns0:Body></ns0:Envelope>
我试过了:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ExtLineNum"/>
</xsl:stylesheet>
但那并没有成功.. 猜猜这是一个简单的问题,但我找不到答案?
提前致谢,
麦克
答案 0 :(得分:1)
感谢Michael.hor257k提供的link,我找到了正确的命名空间语法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:met="http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder"
exclude-result-prefixes="met">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="met:SalesOrder/met:SalesTable/met:SalesLine/met:ExtLineNum"/>
</xsl:stylesheet>
Thnx伙伴们的帮助!
亲切的问候,
麦克
答案 1 :(得分:-1)
尝试匹配父节点并使用node-nam'ExtLineNum'跳过内部节点:
<xsl:template match="SalesLine">
<xsl:copy-of select="*[node-name() != 'ExtLineNum']" />
</xsl:template>