删除子节点上的xml标记

时间:2016-06-20 13:30:47

标签: xml xslt

我有一个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>

但那并没有成功.. 猜猜这是一个简单的问题,但我找不到答案?

提前致谢,

麦克

2 个答案:

答案 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>