我无法在xpath下方访问属性标签下的PartNumber / Description值,但下面给出了soap xml。让我知道所需的更多详细信息。
请对此提供帮助。谢谢!!
正在使用的Xpath和SOAP XML消息:
<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='PullCustomerPartsPricingResponse']/*[local-name()='PullCustomerPartsPricingResult']/*[local-name()='CustomerPart']/@*[local-name()='PartNumber']"/>
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header />
<s:Body>
<PullCustomerPartsPricingResponse xmlns="http://cdx.dealerbuilt.com/Api/0.99/">
<PullCustomerPartsPricingResult xmlns:a="http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:CustomerPart>
<a:Placement>
<a:GroupId>10</a:GroupId>
</a:Placement>
<a:Attributes xmlns:b="http://schemas.datacontract.org/2004/07/DealerBuilt.Models.Parts">
<b:AddedDate>2017-12-19T00:00:00</b:AddedDate>
<b:DealerPartId>287925</b:DealerPartId>
<b:Description>BAT (51/500AMP85)</b:Description>
<b:PartNumber>31500SB2yy1M</b:PartNumber>
<b:QuantityLostMonthToDate>0</b:QuantityLostMonthToDate>
</a:Attributes>
<a:PartKey>GZ287925</a:PartKey>
<a:CustomerListPrice xmlns:b="http://schemas.datacontract.org/2004/07/DealerBuilt.Models">
<b:Amount>130.49</b:Amount>
<b:Currency>UsDollar</b:Currency>
</a:CustomerListPrice>
</a:CustomerPart>
</PullCustomerPartsPricingResult>
</PullCustomerPartsPricingResponse>
</s:Body>
</s:Envelope>
问候 瓦尔丹
答案 0 :(得分:0)
您已经以此结束了xpath的长表达。
/@*[local-name()='PartNumber']
但是PartNumber
不是属性。这是一个名为PartNumber
的元素,它是恰好名为Attributes
的元素的子元素,但实际上并没有使其成为XML术语的属性!
应该看起来像这样...
<xsl:value-of select="/*[local-name()='Envelope']
/*[local-name()='Body']
/*[local-name()='PullCustomerPartsPricingResponse']
/*[local-name()='PullCustomerPartsPricingResult']
/*[local-name()='CustomerPart']
/*[local-name()='Attributes']
/*[local-name()='PartNumber']"/>
尽管最好在XSLT中声明名称空间,然后在xpath中使用该名称空间。
答案 1 :(得分:0)
请求XML中的名称空间也需要在xslt中使用。在xsl之后给出PartNumber值。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:regexp="http://exslt.org/regular-expressions" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:a="http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="http://schemas.datacontract.org/2004/07/DealerBuilt.Models.Parts">
<xsl:output method="xml" version="1.0"/>
<xsl:template match="/">
<xsl:value-of select="*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='PullCustomerPartsPricingResponse']/*[local-name()='PullCustomerPartsPricingResult']/*[local-name()='CustomerPart']/*[local-name()='Attributes']/*[local-name()='PartNumber']"/>
</xsl:template>
</xsl:stylesheet>