xslt不同值不适用于属性
我有以下xml文件,我需要找出多个组中存在的不同属性语言数xslt不同值不适用于属性,xslt,Xslt,我有以下xml文件,我需要找出多个组中存在的不同属性语言数 <?xml version="1.0" encoding="UTF-8"?> <tns:DfCustomer> <tns:Date_TimeList> <tns:Date_Time index="1">1404211736</tns:Date_Time> </tns:Date_TimeList> <tns:Short_NameList>
<?xml version="1.0" encoding="UTF-8"?>
<tns:DfCustomer>
<tns:Date_TimeList>
<tns:Date_Time index="1">1404211736</tns:Date_Time>
</tns:Date_TimeList>
<tns:Short_NameList>
<tns:Short_Name language="GB">ABC EUROPE</tns:Short_Name>
</tns:Short_NameList>
<tns:Name_1List>
<tns:Name_1 language="GB">ABC EUROPE</tns:Name_1>
</tns:Name_1List>
<tns:Name_2List>
<tns:Name_2 language="GB">ABC EUROPE</tns:Name_2>
</tns:Name_2List>
<tns:StreetList>
<tns:Street language="GB">FRANKFURTER STR.107</tns:Street>
<tns:Street language="FR">D-64807 DIEBURG</tns:Street>
</tns:StreetList>
<tns:address1List>
<tns:address1 language="GB" index="1">Test GB Address 1</tns:address1>
<tns:address1 language="FR" index="1">Test FR Address 1</tns:address1>
<tns:address1 language="DE" index="1">Test DE Address 1</tns:address1>
<tns:address1 language="GB" index="2">Test GB Address 2</tns:address1>
<tns:address1 language="FR" index="2">Test FR Address 2</tns:address1>
<tns:address1 language="GB" index="3">Test GB Address 3</tns:address1>
</tns:address1List>
<tns:Town_CountryList>
<tns:Town_Country language="GB">GERMANY</tns:Town_Country>
</tns:Town_CountryList>
1404211736
ABC欧洲公司
ABC欧洲公司
ABC欧洲公司
法兰克福街107号
D-64807迪堡
测试GB地址1
测试FR地址1
测试DE地址1
测试GB地址2
测试FR地址2
测试GB地址3
德国
在上面的示例中,我有3种不同的语言,如GB、DE和FR。我希望得到计数3。我尝试使用xslt/xpath函数,但似乎没有任何效果。它在为每个循环迭代时给出堆栈溢出错误
一,
二,
<xsl:variable name="total">
<xsl:for-each select="dfns:*/dfns:*[@language]/@language">
<xsl:value-of select="."/>
</xsl:for-each>
三,
我不确定我做错了什么。请帮帮我 给定格式良好的输入,例如: XML
<root>
<Date_TimeList>
<Date_Time index="1">1404211736</Date_Time>
</Date_TimeList>
<Short_NameList>
<Short_Name language="GB">ABC EUROPE</Short_Name>
</Short_NameList>
<Name_1List>
<Name_1 language="GB">ABC EUROPE</Name_1>
</Name_1List>
<Name_2List>
<Name_2 language="GB">ABC EUROPE</Name_2>
</Name_2List>
<StreetList>
<Street language="GB">FRANKFURTER STR.107</Street>
<Street language="FR">D-64807 DIEBURG</Street>
</StreetList>
<address1List>
<address1 language="GB" index="1">Test GB Address 1</address1>
<address1 language="FR" index="1">Test FR Address 1</address1>
<address1 language="DE" index="1">Test DE Address 1</address1>
<address1 language="GB" index="2">Test GB Address 2</address1>
<address1 language="FR" index="2">Test FR Address 2</address1>
<address1 language="GB" index="3">Test GB Address 3</address1>
</address1List>
<Town_CountryList>
<Town_Country language="GB">GERMANY</Town_Country>
</Town_CountryList>
</root>
1404211736
ABC欧洲公司
ABC欧洲公司
ABC欧洲公司
法兰克福街107号
D-64807迪堡
测试GB地址1
测试FR地址1
测试DE地址1
测试GB地址2
测试FR地址2
测试GB地址3
德国
以下样式表:
XSLT2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<result>
<xsl:value-of select="count(distinct-values(//@language))" />
</result>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<result>3</result>
3.
给定格式良好的输入,例如:
XML
<root>
<Date_TimeList>
<Date_Time index="1">1404211736</Date_Time>
</Date_TimeList>
<Short_NameList>
<Short_Name language="GB">ABC EUROPE</Short_Name>
</Short_NameList>
<Name_1List>
<Name_1 language="GB">ABC EUROPE</Name_1>
</Name_1List>
<Name_2List>
<Name_2 language="GB">ABC EUROPE</Name_2>
</Name_2List>
<StreetList>
<Street language="GB">FRANKFURTER STR.107</Street>
<Street language="FR">D-64807 DIEBURG</Street>
</StreetList>
<address1List>
<address1 language="GB" index="1">Test GB Address 1</address1>
<address1 language="FR" index="1">Test FR Address 1</address1>
<address1 language="DE" index="1">Test DE Address 1</address1>
<address1 language="GB" index="2">Test GB Address 2</address1>
<address1 language="FR" index="2">Test FR Address 2</address1>
<address1 language="GB" index="3">Test GB Address 3</address1>
</address1List>
<Town_CountryList>
<Town_Country language="GB">GERMANY</Town_Country>
</Town_CountryList>
</root>
1404211736
ABC欧洲公司
ABC欧洲公司
ABC欧洲公司
法兰克福街107号
D-64807迪堡
测试GB地址1
测试FR地址1
测试DE地址1
测试GB地址2
测试FR地址2
测试GB地址3
德国
以下样式表:
XSLT2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<result>
<xsl:value-of select="count(distinct-values(//@language))" />
</result>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<result>3</result>
3.
因为Nodepad++XML工具基于libxml,只支持XSLT 1.0。
您可以尝试此基于密钥的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="klanguage" match="*[@language]" use="@language"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:value-of select="count( //*[
generate-id()
=
generate-id(key('klanguage', @language)[1])
])" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它使用记事本++生成以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>3</root>
3.
基于:因为Nodepad++XML工具基于libxml,它只支持XSLT1.0。 您可以尝试此基于密钥的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="klanguage" match="*[@language]" use="@language"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:value-of select="count( //*[
generate-id()
=
generate-id(key('klanguage', @language)[1])
])" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它使用记事本++生成以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>3</root>
3.
基于:请发布一个格式良好的XML输入示例。--你想考虑整个XML文档中的所有@语言属性吗?我想考虑XML FielWew中的所有语言属性,然后我的答案应该为您工作。请发布一个格式良好的XML输入示例。你想考虑整个XML文档中的所有@语言属性吗?我想考虑XML语言中的所有语言属性,然后我的答案应该为你工作。在记事本+编辑器中尝试你的代码,得到结果迈克不认为这是一个XSLT 2处理器,是吗?是的。XSLT 1.0处理器找不到函数不同的值。它会在Notepad++编辑器中抛出NPETried代码,结果为空。我不认为这是XSLT2.0处理器,是吗?是的,Mike。XSLT 1.0处理器找不到函数不同的值。它抛出NPEyour示例运行良好,正如您所说,是XSLT版本的问题导致了它。然而,如果我在我的大XSLT中复制相同的行,它不会给我正确的结果。它甚至没有进入xsl:template match=“/”中。。不知道怎么了。。我在想办法。谢谢你的帮助!!您的示例运行良好,正如您所说,是XSLT版本的问题导致了它。然而,如果我在我的大XSLT中复制相同的行,它不会给我正确的结果。它甚至没有进入xsl:template match=“/”中。。不知道怎么了。。我在想办法。谢谢你的帮助!!