0

私の XML データは次のようになります。

<mixed_type_parent>

...text...

  <other_element1/>
  <other_element2/>

  <element_in_question>...some content...</element_in_question>

  <other_element2>...text...</other_element2>
  <other_element1>...text...</other_element1>

...text...
</mixed_type_parent>

Schematron を使用して確認したいのは、「element_in_question」の外側にテキストがある場合、「element_in_question」が「mixed_type_parent」内にのみ表示される可能性があることです。つまり

<mixed_type_parent>
  <element_in_question>...some content...</element_in_question>
</mixed_type_parent>

は許可されておらず、エラーが発生するはずです。

「mixed_type_parent」内ですべてのテキストの文字列長をすぐに取得しようとしました

string-length(replace(ancestor::mixed_type_parent[1]/text(),' ', ''))

しかし、ここでも、XPath で最も厄介なエラーの 1 つがあります。

XSLT では、考えられる最も単純な関数でこの問題を解決しました。

<xsl:function name="locfun:make_string">
 <xsl:param name="input_sequence"/>
 <xsl:value-of select="$input_sequence"/>
</xsl:function>

(XPath にそのような組み込み関数がないように思われるのは、本当に残念です。)

しかし、Schematron でこの機能を使用するにはどうすればよいでしょうか? これに対する解決策が見つかりませんでした。

それ以外:「mixed_type_parent」を除く「mixed_type_parent」の他のすべての子からすべてのテキストを取得するにはどうすればよいですか?

4

2 に答える 2

2

これを試して:

string-join(ancestor::mixed_type_parent[1]/text(),'')=''

2 番目の質問: 「mixed_type_parent」を除く「mixed_type_parent」の他のすべての子からすべてのテキストを取得するにはどうすればよいですか?

/mixed_type_parent/*[not(self::element_in_question)]/text()
于 2014-02-06T09:15:51.177 に答える
0

この入力 XML を考慮して、

<mixed_type_parent>
    <element_in_question>...some content...</element_in_question>
</mixed_type_parent>

この XSLT が適用されると:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

<xsl:strip-space elements="*"/>

    <xsl:template match="element_in_question">
        <xsl:choose>
            <xsl:when test="preceding-sibling::text() or following-sibling::text()">
                true
            </xsl:when>
            <xsl:otherwise>
                false
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>

生産する

false
于 2014-02-06T09:15:05.567 に答える