Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
使用XSLT2.0将字符串模式更改为元素_Xslt_Xpath_Xslt 2.0 - Fatal编程技术网

使用XSLT2.0将字符串模式更改为元素

使用XSLT2.0将字符串模式更改为元素,xslt,xpath,xslt-2.0,Xslt,Xpath,Xslt 2.0,我正在将嵌入的文本模式转换为元素 我似乎做的每件事都会添加点击,而不是 这是我的输入 <?xml version="1.0" encoding="UTF-8"?> <response> <lst> <lst id="7c5d14cd1225d94ff8dd9cf06eb67f05"> <arr name="note"> <str> Lorem ipsum dolor

我正在将嵌入的文本模式转换为元素

我似乎做的每件事都会添加
点击
,而不是

这是我的输入

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <lst>
      <lst id="7c5d14cd1225d94ff8dd9cf06eb67f05">
         <arr name="note">
            <str>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tellus risus,
iaculis id convallis sagittis, convallis in purus. Suspendisse imperdiet, enim
aliquam varius gravida, eros sapien mattis metus, vel suscipit lacus lacus eget
sem. Nulla ullamcorper enim quis dolor pellentesque consectetur quis quis eros.
Pellentesque et urna @@pre@@corn@@post@@, vel gravida urna. Nulla facilisi. Sed condimentum
purus non magna tristique molestie. Aliquam vulputate lobortis cursus. Morbi
tincidunt lobortis feugiat. Praesent in sapien diam. Aliquam bibendum elit ut
massa tristique tincidunt eu vel nisl. Aenean @@pre@@corn@@post@@ nulla id urna laoreet tempus.
Etiam ultricies lacus a arcu ornare iaculis. In eget tempus nisi.
        </str>
         </arr>
      </lst>
      <lst id="0e18352acb70ff7c4441dfd201dd7cd1">
         <arr name="note">
            <str>
Proin vitae eleifend enim. Nullam quis mauris ipsum. Proin sem dolor, placerat
nec ornare et, pulvinar a arcu. Cras varius venenatis sapien, eu sagittis sem
laoreet nec. Sed congue elit et magna tincidunt in ultrices quam rhoncus.
Maecenas ullamcorper pellentesque lobortis. Nunc blandit semper neque, vel
rhoncus tortor lacinia nec. Praesent sed feugiat @@pre@@corn@@post@@. Integer vel arcu leo,
sit amet volutpat diam. Cras posuere tristique est, ut tristique nibh
sollicitudin et. Pellentesque vitae justo sapien, non imperdiet velit.
        </str>
         </arr>
      </lst>
   </lst>
</response>

Lorem ipsum dolor sit amet,是一位杰出的献身者。台上万岁,
箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状箭矢。Suspendisse imperdiet,enim
阿利夸姆葡萄品种,智者马蒂斯梅特斯,水资源
扫描电镜。乌拉·乌兰科佩尔·埃尼姆·奎斯·多洛尔·佩伦茨克·奎斯·厄洛斯。
佩伦茨克和乌尔纳@前@玉米@后@,孕妇乌尔纳。无便利。调味汁
purus non magna tristique molestie。宽叶秃鹫。莫比
卢博蒂家族。在sapien diam的Praesent。比本杜姆艾利特阿利夸姆酒店
马萨·特里斯蒂克·蒂奇登·欧维尼酒店。埃尼安@pre@@corn@@post@@nulla id urna laoreet tempus。
这是一个很好的例子。在eget tempus nisi中。
埃利芬德埃尼姆的生命。纳拉姆·奎斯·莫里斯·伊普苏姆。普罗因sem dolor,placerat
nec ornare et,pulvinar a arcu。罗非鱼
拉奥里特nec。这是朗卡斯广场上的精英和大人物。
梅塞纳斯·乌兰科珀·佩伦茨克·洛博蒂斯。努克·布兰迪特·森佩尔·内克,维尔
斜纹夜蛾。“前”和“后”都是“前”的意思。整型水平弧形狮子座,
坐在我的座位上。这是我的最爱,也是我的最爱
sollicitudin et.Pellentesque vitae justo sapien,非帝国主义者。
我的结果应该是

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <lst>
      <lst id="7c5d14cd1225d94ff8dd9cf06eb67f05">
         <arr name="note">
            <str>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tellus risus,
iaculis id convallis sagittis, convallis in purus. Suspendisse imperdiet, enim
aliquam varius gravida, eros sapien mattis metus, vel suscipit lacus lacus eget
sem. Nulla ullamcorper enim quis dolor pellentesque consectetur quis quis eros.
Pellentesque et urna <hit>corn</hit>, vel gravida urna. Nulla facilisi. Sed condimentum
purus non magna tristique molestie. Aliquam vulputate lobortis cursus. Morbi
tincidunt lobortis feugiat. Praesent in sapien diam. Aliquam bibendum elit ut
massa tristique tincidunt eu vel nisl. Aenean <hit>corn</hit> nulla id urna laoreet tempus.
Etiam ultricies lacus a arcu ornare iaculis. In eget tempus nisi.
        </str>
         </arr>
      </lst>
      <lst id="0e18352acb70ff7c4441dfd201dd7cd1">
         <arr name="note">
            <str>
Proin vitae eleifend enim. Nullam quis mauris ipsum. Proin sem dolor, placerat
nec ornare et, pulvinar a arcu. Cras varius venenatis sapien, eu sagittis sem
laoreet nec. Sed congue elit et magna tincidunt in ultrices quam rhoncus.
Maecenas ullamcorper pellentesque lobortis. Nunc blandit semper neque, vel
rhoncus tortor lacinia nec. Praesent sed feugiat <hit>corn</hit>. Integer vel arcu leo,
sit amet volutpat diam. Cras posuere tristique est, ut tristique nibh
sollicitudin et. Pellentesque vitae justo sapien, non imperdiet velit.
        </str>
         </arr>
      </lst>
   </lst>
</response>

Lorem ipsum dolor sit amet,是一位杰出的献身者。台上万岁,
箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢状的箭矢。Suspendisse imperdiet,enim
阿利夸姆葡萄品种,智者马蒂斯梅特斯,水资源
扫描电镜。乌拉·乌兰科佩尔·埃尼姆·奎斯·多洛尔·佩伦茨克·奎斯·厄洛斯。
佩伦茨克和乌尔纳玉米,以及孕妇乌尔纳。无便利。调味汁
purus non magna tristique molestie。宽叶秃鹫。莫比
卢博蒂家族。在sapien diam的Praesent。比本杜姆艾利特阿利夸姆酒店
马萨·特里斯蒂克·蒂奇登·欧维尼酒店。这是一种玉米,它是一种玉米。
这是一个很好的例子。在eget tempus nisi中。
埃利芬德埃尼姆的生命。纳拉姆·奎斯·莫里斯·伊普苏姆。普罗因sem dolor,placerat
nec ornare et,pulvinar a arcu。罗非鱼
拉奥里特nec。这是朗卡斯广场上的精英和大人物。
梅塞纳斯·乌兰科珀·佩伦茨克·洛博蒂斯。努克·布兰迪特·森佩尔·内克,维尔
斜纹夜蛾。帕雷森特种植了玉米。整型水平弧形狮子座,
坐在我的座位上。这是我的最爱,也是我的最爱
sollicitudin et.Pellentesque vitae justo sapien,非帝国主义者。

基本上你会使用
分析字符串

<xsl:template match="arr/str">
  <xsl:copy>
    <xsl:analyze-string select="." regex="@@pre@@(.+)@@post@@">
      <xsl:matching-substring>
        <hit>
          <xsl:value-of select="regex-group(1)"/>
        </hit>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="."/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:copy>
</xsl:template>

这样,如果一行中有多个模式,您应该会得到更好的结果。如果仍不能按您的要求运行,请发布更详细的输入数据。

如果一行中有多个命中,则不适用于这种情况。我已编辑代码以解决您提出的问题。最后一件事。在我的实际用例中,内容的一个实例是“@@pre@@Corn@@post@”,但输出将该实例降低为“Corn”。这也是可以解决的吗?我不明白为什么会发生这种情况,因为正则表达式模式的任何匹配都是
@@@pre@@([^@]+)@@post@
的,代码只是输出
([^@]+)
收集的内容,所以
Corn
应该作为
Corn
输出。您使用的是哪个XSLT2.0处理器?我使用Saxon 9.5进行了测试,模式
Cras@@pre@@Corn@@post@@posuere
被转换为
Cras-Corn-posuere
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* , node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="arr/str">
  <xsl:copy>
    <xsl:analyze-string select="." regex="@@pre@@([^@]+)@@post@@">
      <xsl:matching-substring>
        <hit>
          <xsl:value-of select="regex-group(1)"/>
        </hit>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="."/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>