我对样式表很新,所以我遇到了一些基本问题。
这是我的XML:
<NS1:Envelope xmlns:NS1="http://blahblahblah">
<NS1:Body>
<NS2:STR xmlns:NS2="http://blahblah">
<NS2:STD>
<NS2:ST>CA</NS2:ST>
<NS2:CTY>Los Angeles</NS2:CTY>
<NS2:CY>Artesia</NS2:CY>
<NS2:STGC>05</NS2:STGC>
<NS2:CTYGC>037</NS2:CTYGC>
<NS2:CYGC>0160</NS2:CYGC>
<NS2:GC>050370160</NS2:GC>
<NS2:STTR>0.065000</NS2:STTR>
<NS2:CTYTR>0.025000</NS2:CTYTR>
<NS2:CYTR>0.000000</NS2:CYTR>
<NS2:TotalTR>0.090000</NS2:TotalTR>
<NS2:EffectiveDate>2014-09-24</NS2:EffectiveDate>
</NS2:STD>
<NS2:STD>
<NS2:ST>CA</NS2:ST>
<NS2:CTY>Los Angeles</NS2:CTY>
<NS2:CY>Cerritos</NS2:CY>
<NS2:STGC>05</NS2:STGC>
<NS2:CTYGC>037</NS2:CTYGC>
<NS2:CYGC>6430</NS2:CYGC>
<NS2:GC>050370160</NS2:GC>
<NS2:STTR>0.065000</NS2:STTR>
<NS2:CTYTR>0.025000</NS2:CTYTR>
<NS2:CYTR>0.000000</NS2:CYTR>
<NS2:TotalTR>0.090000</NS2:TotalTR>
<NS2:EffectiveDate>2014-09-24</NS2:EffectiveDate>
</NS2:STD>
</NS2:STR>
</NS1:Body>
</NS1:Envelope>
这是我的样式表:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:NS1="http://blahblahblah"
xmlns:NS2="http://blahblah">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/NS1:Envelope/NS1:Body/NS2:STR/NS2:STD">
<xsl:element name="CALL_ENGINE_RESPONSE">
<xsl:value-of select="NS2:ST" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我得到的回应是:
<?xml version="1.0" encoding="UTF-8"?>
<CALL_ENGINE_RESPONSE>CA</CALL_ENGINE_RESPONSE>
<CALL_ENGINE_RESPONSE>CA</CALL_ENGINE_RESPONSE>
我想收到像
这样的回复 <CALL_ENGINE_RESPONSE>
<STATE>CA</STATE>
<STATE>CA</STATE>
</CALL_ENGINE_RESPONSE>
如果我要编辑格式,请告诉我,我为此做了很长时间而道歉。
答案 0 :(得分:1)
您对命名空间的处理非常好!
要解决您的问题,您可以做的是拥有一个与NS2:STD
的共同祖先相匹配的模板,然后在那里输出CALL_ENGINE_RESPONSE
,然后选择NS2:STD
元素
<xsl:template match="NS2:STR">
<CALL_ENGINE_RESPONSE>
<xsl:apply-templates select="NS2:STD" />
</CALL_ENGINE_RESPONSE>
</xsl:template>
在匹配NS2:STD
的模板中,您将输出STATE
元素
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:NS1="http://blahblahblah" xmlns:NS2="http://blahblah" exclude-result-prefixes="NS1 NS2">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="NS2:STR">
<CALL_ENGINE_RESPONSE>
<xsl:apply-templates select="NS2:STD"/>
</CALL_ENGINE_RESPONSE>
</xsl:template>
<xsl:template match="NS2:STD">
<STATE>
<xsl:value-of select="NS2:ST"/>
</STATE>
</xsl:template>
</xsl:stylesheet>
请注意,无需在模板匹配中放置NS2:STD
元素的完整路径。如果层次结构中不同位置有其他NS2:STD
个元素,您只需要执行此操作。