2013-04-25 67 views
0

是否可以更普遍地編寫此測試。我已經坐了好幾個小時了,我不知道:D。一般可以寫這個嗎? XPATH 2.0

<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> 

回答

0

在你的規則和你的實例文檔來看,我強烈懷疑,你不希望有一個「包含」試驗,而是一個「= 「測試。人們經常想象英文短語「屬性包含值」應該翻譯爲XPath contains(@att, 'val'),但這是錯誤的;它應該是@att = 'val'

我想你試圖表達的約束是有兩個položka元素,其中一個cena/@měna屬性的值爲USD,另一個值爲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'

+0

我正在讀你的書這是awsome :)我會用它來寫我的學士論文。 – James 2013-08-11 15:35:34

0

使用

contains('USD|CZK|USD', string-join(o:položka/o:cena/@měna, '|')) 

XSLT 2.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> 

然後再正確的結果產生:

false 
相關問題