XSL和模式匹配模板条件

时间:2014-08-19 14:41:12

标签: xml xslt xsd xslt-2.0

如何为XML编写架构。我在下面提供的xml的架构是什么。以下是我的努力:

我有以下XML:

<?xml version="1.0" encoding="UTF-8" ?>
   <doc>
        <QQQ>hey</QQQ>
        <QQQ a1="1">hey1</QQQ>

        <PPP>hey</PPP>
        <PPP a1="1">hey1</PPP>
   </doc>

关注XSL:

  <xsl:template match="@a1[.='1']">
    <match>a1 is 1: <xsl:value-of select="."/></match>
  </xsl:template>

  <xsl:template match="@*[local-name()='a1'][.='2']">
    <match>a1 is 2: <xsl:value-of select="."/></match>
  </xsl:template>

到目前为止,这是我的工作:

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="QQQ" type="xsd:string">
      <xsd:complexType>
        <xsd:attribute name="a1" type="xsd:string"/>
      </xsd:complexType>
    </xsd:element>

    </xsd:schema>

2 个答案:

答案 0 :(得分:0)

你最初的问题是你在说QQQ元素的两个相互矛盾的事情:首先你说它的类型是xsd:string,然后你说它有一个复杂的类型。停止自相矛盾:如果你想让QQQ拥有一个属性,那么你不希望它有类型字符串。

任何有关XSD的教程都应该对您有所帮助。当你开始遇到简单教程中没有讨论的问题时,你会得到更好的回答,因此不会邀请回答者说“RTFM”。

答案 1 :(得分:0)

首先,我不知道XSLT代码对问题描述的贡献。你为什么要告诉我们你的XSLT是什么样的?您如何看待这会影响答案?

其次,XML实例符合许多模式。除了您的示例之外,它们在允许的其他XML实例方面也有所不同。为一个XML实例编写模式并不是真正有意义的,仅适用于类似实例的系列。

您也很难猜出您想要表达的限制因素。例如,doc是否总是由两个QQQ元素组成,后面跟着两个PPP元素?是偶然的情况是a1属性出现在偶数子元素上而在奇数元素上不存在?总是这样的情况是,如果a1属性存在,那么它的值与元素内容的最后一个字符相同吗?

用英语写规则可能比给我们一个例子好。写出:&#34;每个文档都遵循以下规则:&#34;然后用英文写一些规则。