是否有可能更广泛地编写这个测试。我已经坐在上面好几个小时了,我弄不清楚:D。
<pattern>
<title>Pravidla pro měnu(CZK/USD)</title>
<rule context="/o:objednávka/o:položky">
<report test="(contains(o:položka[1]/o:cena/@měna,'CZK') and
contains(o:položka[2]/o:cena/@měna,'USD'))or(contains(o:položka[2]/o:cena/@měna,'CZK') and
contains(o:položka[1]/o:cena/@měna,'USD'))">V objednávce
musí být jen jedna měna.</report>
</rule>XML文档
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="cssTrans.css" type="text/css" ?>
<?xml-model href="objednavka.sch" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<objednávka xmlns="urn:x-eshop:document-schemas:purchase-order">
<položky>
<položka kód="a">
<název>Sekačka na trávu</název>
<počet mj="ks">1</počet>
<cena měna="USD">0.9</cena>
<popis>http://example.org/sekacka.html</popis>
</položka>
<položka kód="d">
<název>Travní semeno</název>
<počet mj="kg">2.5</počet>
<cena měna="CZK">18001</cena>
</položka>
</položky>
</objednávka>发布于 2013-04-25 15:48:48
查看您的规则和实例文档,我强烈怀疑您不需要“包含”测试,而是需要"=“测试。人们常常认为英语短语“属性包含值”应该被翻译成XPath contains(@att, 'val'),但这是错误的,应该是@att = 'val'。
我认为,您要表达的约束是,有两个položka元素,其中一个是cena/@měna属性,值是美元,而另一个元素是CZK值。我想说的是
o:položka/o:cena/@měna ='CZK' and o:položka/o:cena/@měna = 'USD'记住,在XPath中,"=“是存在的:a/b/c='USD'意味着a/b/c选择的至少一个节点的值为'USD'。
发布于 2013-04-25 03:36:13
使用
contains('USD|CZK|USD', string-join(o:položka/o:cena/@měna, '|'))基于XSLT2.0的验证:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:o="urn:x-eshop:document-schemas:purchase-order">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/o:objednávka/o:položky">
<xsl:sequence select=
"contains('USD|CZK|USD', string-join(o:položka/o:cena/@měna, '|'))"/>
</xsl:template>
</xsl:stylesheet>当将此转换应用于所提供的XML文档时::
<objednávka xmlns="urn:x-eshop:document-schemas:purchase-order">
<položky>
<položka kód="a">
<název>Sekačka na trávu</název>
<počet mj="ks">1</počet>
<cena měna="USD">0.9</cena>
<popis>http://example.org/sekacka.html</popis>
</položka>
<položka kód="d">
<název>Travní semeno</název>
<počet mj="kg">2.5</počet>
<cena měna="CZK">18001</cena>
</položka>
</položky>
</objednávka>计算XPath表达式,并将计算结果复制到输出:
true如果在此XML文档上计算相同的表达式,则为:
<objednávka xmlns="urn:x-eshop:document-schemas:purchase-order">
<položky>
<položka kód="a">
<název>Sekačka na trávu</název>
<počet mj="ks">1</počet>
<cena měna="USD">0.9</cena>
<popis>http://example.org/sekacka.html</popis>
</položka>
<položka kód="d">
<název>Travní semeno</název>
<počet mj="kg">2.5</počet>
<cena měna="USD">18001</cena>
</položka>
</položky>
</objednávka>,然后再次生成正确的结果:
falsehttps://stackoverflow.com/questions/16205043
复制相似问题