我想将子节点的值放入“ foreach”循环中。
这是原始的XML信封:
<ns2:pointOfSale xmlns:ns2="" mode="UPDATE" timestamp="2018-10-08T16:18:57.611+02:00">
<ns2:id type="AMP">7451</ns2:id>
<ns2:info>
<ns2:type>AMP</ns2:type>
<ns2:name>PASSE</ns2:name>
<ns2:address>
<ns2:streetName>JEZUSSTRAAT</ns2:streetName>
<ns2:streetNumber>15</ns2:streetNumber>
<ns2:postalCode>20</ns2:postalCode>
<ns2:city>ANTWERPEN</ns2:city>
<ns2:countryCode>BE</ns2:countryCode>
</ns2:address>
<ns2:phoneNumber>0323</ns2:phoneNumber>
<ns2:faxNumber>0323</ns2:faxNumber>
</ns2:info>
<ns2:deliveryInfo>
<ns2:info>
<ns2:name>HANDLING PLACE</ns2:name>
<ns2:value>F3</ns2:value>
</ns2:info>
<ns2:info>
<ns2:name>BOX NUMBER</ns2:name>
<ns2:value>A</ns2:value>
</ns2:info>
<ns2:info>
<ns2:name>POS CLASSIFICATION</ns2:name>
<ns2:value>0</ns2:value>
</ns2:info>
<ns2:info>
<ns2:name>AMP ZONE</ns2:name>
<ns2:value>1</ns2:value>
</ns2:info>
</ns2:deliveryInfo>
</ns2:pointOfSale>
这是我的xslt代码:
<?xml version="1.1" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="no" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:element name="clients">
<xsl:attribute name="xsi:noNamespaceSchemaLocation">setClients.xsd</xsl:attribute>
<xsl:attribute name="encryptedData">N</xsl:attribute>
<xsl:for-each select="/body/salesItem/contentSet/inlineXML/group/pointOfSale">
<xsl:if test="@mode='UPDATE'">
<xsl:element name="client">
<xsl:attribute name="cstclavep">
<xsl:value-of select="id"/>
</xsl:attribute>
<xsl:element name="address">
<xsl:element name="STREETNAME"><xsl:value-of select="/info/address[streetName]"/></xsl:element>
</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="@mode='DELETE'">
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="*" mode="content">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*" />
<xsl:apply-templates mode="content"/>
</xsl:element>
</xsl:template>
<xsl:template match="text()" mode="content">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
这是现在的结果:
<?xml version="1.0" encoding="utf-8"?><clients xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="setClients.xsd" encryptedData="N"><client cstclavep="7451"><address><STREETNAME><streetName>MARKT</streetName><streetName>CHAUSSEE DU PONT DU SART</streetName><streetName>TORHOUTSEBAAN</streetName><streetName>KAAI</streetName><streetName>JEZUSSTRAAT</streetName><streetName>JEZUSSTRAAT</streetName></STREETNAME></address></client><client cstclavep="7451"><address><STREETNAME><streetName>MARKT</streetName><streetName>CHAUSSEE DU PONT DU SART</streetName><streetName>TORHOUTSEBAAN</streetName><streetName>KAAI</streetName><streetName>JEZUSSTRAAT</streetName><streetName>JEZUSSTRAAT</streetName></STREETNAME></address></client></clients>
这就是我需要的
<?xml version="1.0" encoding="utf-8"?><clients xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="setClients.xsd" encryptedData="N">
<client cstclavep="7451"><address><STREETNAME>MARKT</STREETNAME></address></client>
<client cstclavep="7451"><address><STREETNAME>JEZUSTRAAT</STREETNAME></address></client>
</clients>
实际上,它将所有地址值都放入一个客户端中。我想将当前地址值添加到客户端。
能给个解决办法吗?
谢谢
答案 0 :(得分:0)
您输入的XML看起来不像您使用的XML,但是请尝试使用
my_url
,如果您只需要streetName节点的值,而不是地址的整个子树。
我在您的原始xml上使用它并获得正确的结果:
<STREETNAME><xsl:value-of select="xsi:info/xsi:address/xsi:streetName"/></STREETNAME>