【发布时间】:2014-11-04 23:16:56
【问题描述】:
我正在尝试将 soap:Header 元素的所有子元素复制到一个变量中,并尝试删除 PricingRequest 空命名空间 (xmlns="http://www.ama.net") 并仅输出 xml 的 PricingRequest 部分.我能够删除 PricingRequest 空命名空间并获得正确的输出,但无法将 soap:Header 子元素存储到变量中,是否可以将 soap:Header 的子元素复制到变量中?
输入 XML:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap ="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns="http://www.ama.net/1axml-msg/schema/msg-header-1_0.xsd">
<MessageHeader ResponseRequested="true" version="1.0" Terminate="true" Reverse="true" id="09B5581A" soap:mustUnderstand="1">
<From>1ASI</From>
<To>1ASRINSAIG</To>
<TimeStamp>
<GenerationTime>2014-10-22T12:41:38Z</GenerationTime>
</TimeStamp>
</MessageHeader>
</soap:Header>
<soap:Body>
<PricingRequest xmlns="http://www.ama.net">
<originatorSection>
<deliverySystem>
<companyId>1A</companyId>
<cityCode>MUC</cityCode>
</deliverySystem>
</originatorSection>
</PricingRequest>
</soap:Body>
</soap:Envelope>
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.ama.net" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- <xsl:template match="/*[local-name()='Envelope']">
<xsl:variable name="SOAPHeader" select="/soap:Header/node()" />
<xsl:text> MessageHeader INFO:<xsl:copy-of select="$SOAPHeader"/> </xsl:text>
</xsl:template> -->
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="*[not(ancestor-or-self::x:PricingRequest)]">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
期待 OUTPUT 但无法将 soap:Header 复制到变量中:
<PricingRequest>
<originatorSection>
<deliverySystem>
<companyId>1A</companyId>
<cityCode>MUC</cityCode>
</deliverySystem>
</originatorSection>
</PricingRequest>
【问题讨论】:
-
您说“复制soap:Header 的子元素”,但您显示的是soap:Body 的后代。
-
嗨,迈克尔,感谢您调查我的问题。上面的 xslt 能够获得我正在寻找的输出 XML,并且出于日志记录的目的,我需要在soap:Header 中打印所有元素和属性。如果您查看我的 xslt,您可以在注释代码中看到我正在尝试执行的操作。我无法匹配 soap:Header 并将其内容复制到变量中