gpt4 book ai didi

xml - 如何从动态行中获取数据

转载 作者:行者123 更新时间:2023-12-03 16:07:06 25 4
gpt4 key购买 nike

是否可以在第二个符号后获取数据 ; ?
例如我有这个 XML:

<document>
<line>H;1F;ss;232</line>
<line>H2;1F;sss;232e</line>
<line>H;15F5;sds;232sa;23</line>
<line>Hh;1Fs;scs;232ds</line>
</document>

结果应该是:
<document>
<line>ss</line>
<line>sss</line>
<line>sds</line>
<line>scs</line>
</document>

最佳答案

I. 使用 FXSL 的 XSLT 1.0 解决方案:

这种转变:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
exclude-result-prefixes="ext">
<xsl:import href="strSplit-to-Words.xsl"/>
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/*">
<document>
<xsl:apply-templates/>
</document>
</xsl:template>

<xsl:template match="line">
<xsl:variable name="vwordNodes">
<xsl:call-template name="str-split-to-words">
<xsl:with-param name="pStr" select="."/>
<xsl:with-param name="pDelimiters"
select="';'"/>
</xsl:call-template>
</xsl:variable>

<line>
<xsl:value-of select="ext:node-set($vwordNodes)/*[3]"/>
</line>
</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档 时:
<document>
<line>H;1F;ss;232</line>
<line>H2;1F;sss;232e</line>
<line>H;15F5;sds;232sa;23</line>
<line>Hh;1Fs;scs;232ds</line>
</document>

产生所需的正确结果 :
<document>
<line>ss</line>
<line>sss</line>
<line>sds</line>
<line>scs</line>
</document>

解释 :
  • 我们使用来自 FXSLstr-split-to-words 模板来拆分每个 line 元素的字符串值。请注意,它不仅允许在其 pDelimiters 参数中指定单个字符,还允许指定多个字符。在这种情况下,我们只指定 ';'
  • 结果被捕获在一个变量中作为一个 RTF。我们使用 ext:node-set() 扩展函数 将其转换为普通树。如果您的 XSLT 处理器未实现 ext:node-set(),请查看其文档,该特定 XSLT 处理器实现的 xxx:node-set() 扩展的名称和命名空间是什么。
  • 从如此得到的树中,我们只选择并输出第三个元素 。请注意,这是一个简短的 XPath 表达式,即使我们想要第 20 个元素,也将使用相同的简短 XPath 表达式——仅索引为 20。仅使用一系列 substring-after() 以简洁的形式是不可能实现的职能。

  • 二。这是一个简短的 XSLT 2.0 解决方案 :
    <xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="/*">
    <document>
    <xsl:apply-templates/>
    </document>
    </xsl:template>

    <xsl:template match="line">
    <document>
    <xsl:value-of select="tokenize(., ';')[3]"/>
    </document>
    </xsl:template>
    </xsl:stylesheet>

    当此转换应用于提供的 XML 文档 时:
    <document>
    <line>H;1F;ss;232</line>
    <line>H2;1F;sss;232e</line>
    <line>H;15F5;sds;232sa;23</line>
    <line>Hh;1Fs;scs;232ds</line>
    </document>

    产生所需的正确结果 :
    <document>
    <document>ss</document>
    <document>sss</document>
    <document>sds</document>
    <document>scs</document>
    </document>

    关于xml - 如何从动态行中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6816316/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com