我有XML例如:
<?xml version="1.0"?>
<data>
<element>
<A>192.168.188.100</A>
<B>/shelf=1</B>
</element>
<element>
<A>192.168.188.100</A>
<B>/slot=1</B>
</element>
<element>
<A>192.168.188.23</A>
<B>/port=client:1:3:1-2</B>
</element>
</data>
我的XSLT映射有效:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:max="http://www.ibm.com/maximo">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<max:SyncCIDW>
<max:CIDWSet>
<xsl:apply-templates select="data/element" />
</max:CIDWSet>
</max:SyncCIDW>
</xsl:template>
<xsl:template match="element">
<max:CI>
<max:CINUM><xsl:value-of select="A"/></max:CINUM>
</max:CI>
</xsl:template>
</xsl:stylesheet>
如何跳过元素,根本不将其添加到我的映射中,只有当元素以&#34; / port =&#34;? 那么在这个例子中,只应通过XSLT处理第三个元素?
谢谢
答案 0 :(得分:1)
这是一种方式:
<xsl:apply-templates select="data/element[starts-with(B,'/port')]" />
仅选择那些B
子节点的文本以/port
开头的元素。
您的element
模板中存在错误:
<max:CINUM><xsl:value-of select="ip"/></max:CINUM>
^^
没有名为ip
的子节点,或许您打算使用A
?
以下样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:max="http://www.ibm.com/maximo">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<max:SyncCIDW>
<max:CIDWSet>
<xsl:apply-templates select="data/element[starts-with(B,'/port')]" />
</max:CIDWSet>
</max:SyncCIDW>
</xsl:template>
<xsl:template match="element">
<max:CI>
<max:CINUM><xsl:value-of select="A"/></max:CINUM>
</max:CI>
</xsl:template>
</xsl:stylesheet>
生成此输出:
<?xml version="1.0" encoding="UTF-8"?>
<max:SyncCIDW xmlns:max="http://www.ibm.com/maximo">
<max:CIDWSet>
<max:CI>
<max:CINUM>192.168.188.23</max:CINUM>
</max:CI>
</max:CIDWSet>
</max:SyncCIDW>