Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex XSLT问题:属性值的正则表达式_Regex_Xml_Xslt - Fatal编程技术网

Regex XSLT问题:属性值的正则表达式

Regex XSLT问题:属性值的正则表达式,regex,xml,xslt,Regex,Xml,Xslt,考虑以下XML: <?xml-stylesheet type="text/xsl" href="eclas.xsl"?> <collection> <record> <datafield tag="150"> <subfield code="a">Abandon des études</subfield><!--accepted FR--> <sub

考虑以下XML:

<?xml-stylesheet type="text/xsl" href="eclas.xsl"?>

  <collection>
    <record>
      <datafield tag="150">
        <subfield code="a">Abandon des études</subfield><!--accepted FR-->
        <subfield code="9">fre</subfield>
      </datafield>
      <datafield tag="150">
        <subfield code="a">Student drop-out</subfield><!--accepted EN-->
        <subfield code="9">eng</subfield>
      </datafield>
      <datafield tag="450">
        <subfield code="a">Décrochage scolaire</subfield><!-- NOT accepted term FR-->
        <subfield code="9">fre</subfield>
      </datafield>
      <datafield tag="450">
        <subfield code="a">Abandon scolaire</subfield><!-- NOT accepted term FR-->
        <subfield code="9">fre</subfield>
      </datafield>
      <datafield tag="450">
        <subfield code="a">Abandon de la scolarité</subfield><!-- NOT preferred term FR-->
        <subfield code="9">fre</subfield>
      </datafield>
    </record>
    <record>
      <datafield tag="151">
        <subfield code="a">Egypte</subfield>
        <subfield code="9">fre</subfield>
      </datafield>
      <datafield tag="151">
        <subfield code="a">Egypt</subfield>
        <subfield code="9">eng</subfield>
      </datafield>
      <datafield tag="451">
        <subfield code="a">République arabe d&apos;Egypte</subfield>
        <subfield code="9">fre</subfield>
      </datafield>
      <datafield tag="451">
        <subfield code="a">République arabe unie</subfield>
        <subfield code="9">fre</subfield>
      </datafield>
      <datafield tag="451">
        <subfield code="a">United Arab Republic</subfield>
        <subfield code="9">eng</subfield>
      </datafield>
    </record>
</collection>
这是一本大型同义词表的样本。 我需要有关正则表达式的帮助,该正则表达式可以选择150或151,也可以选择450或451

以下是我遇到问题的xslt代码:

<xsl:for-each select="datafield[contains(@tag, '150|151' )]">
...
</xsl:for-each>
我试图循环使用值为150或151的数据字段元素。 我的正则表达式似乎不起作用。我尝试了几种方法,但都没有效果。

contains将字符串而不是正则表达式作为第二个参数,因此您的代码正在查找字符串150 | 151。在XSLT1.0中不能使用正则表达式。但是,使用choose函数可以执行多个包含。有关更多信息,请参见问题。

contains函数没有将正则表达式作为第二个参数,只是检查一个简单字符串是否在第一个字符串中。你应该使用匹配项


同样,额外使用|是为了防止拾取1500个字符串,例如。

要匹配以下4个字符串之一: 150、151、450和451。请注意:

第一个字符是1或4, 第二个字符总是5, 最后一个字符是0或1。 因此,匹配所有这些参数的正则表达式是^[14]5[01]$

我放置了^和$anchors以防止匹配这样的字符串 作为较长文本的一部分,例如31508

因此,在XSLT 2.0中,您可以编写:

<xsl:for-each select="datafield[matches(@tag, '^[14]5[01]$')]">

编辑XSLT->XSLT1.0。当然,您可以使用最新版本的语言进行正则表达式处理。对于XSLT问题,说出您使用的语言版本非常重要。
<xsl:for-each select="datafield[matches(@tag, '^(150|151)$')]">
<xsl:for-each select="datafield[contains('|150|151|', concat('|', @tag, '|') )]">
<xsl:for-each select="datafield[matches(@tag, '^[14]5[01]$')]">