如何从 .xsl 文件中的 xml 文件获取所需的标记值?

发布于 2024-11-06 02:07:47 字数 861 浏览 0 评论 0原文

我有以下类型的文件包含 xml 格式,

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <serviceImpl category="default">
        <package>esterMemoryManagement</package>
        <service singleton="true">
            <provides>xoc.hw.cor.memgt.ZContentType</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
    <serviceImpl category="default">
        <package>w.cor.TesterM</package>
        <service singleton="true">
            <provides>xoc.hw.ZAccessTypeProvid</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
</root>

我必须获取 .xsl 文件中标记 内的所有值。我怎样才能做到这一点? 提前致谢。

I have following type of file contains in xml format

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <serviceImpl category="default">
        <package>esterMemoryManagement</package>
        <service singleton="true">
            <provides>xoc.hw.cor.memgt.ZContentType</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
    <serviceImpl category="default">
        <package>w.cor.TesterM</package>
        <service singleton="true">
            <provides>xoc.hw.ZAccessTypeProvid</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
</root>

i have to get all values within tag <provides></provides> in .xsl file. How can i do that?
Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

少年亿悲伤 2024-11-13 02:07:47

这是一个简短而完整的解决方案

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="provides">
  <xsl:value-of select="concat(.,'
')"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<root>
    <serviceImpl category="default">
        <package>esterMemoryManagement</package>
        <service singleton="true">
            <provides>xoc.hw.cor.memgt.ZContentType</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
    <serviceImpl category="default">
        <package>w.cor.TesterM</package>
        <service singleton="true">
            <provides>xoc.hw.ZAccessTypeProvid</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
</root>

生成所需的正确结果

xoc.hw.cor.memgt.ZContentType
xoc.hw.ZAccessTypeProvid

说明

  1. 生成结果的唯一模板是匹配provides的模板。

  2. 第二个模板匹配任何文本节点并具有空正文,它有效地覆盖文本节点的 XSLT 内置模板并防止(“删除”)任何匹配的文本节点输出(否则将由 XSLT 内置模板执行的操作)。

Here is a short and complete solution:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="provides">
  <xsl:value-of select="concat(.,'
')"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

when this transformation is applied on the provided XML document:

<root>
    <serviceImpl category="default">
        <package>esterMemoryManagement</package>
        <service singleton="true">
            <provides>xoc.hw.cor.memgt.ZContentType</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
    <serviceImpl category="default">
        <package>w.cor.TesterM</package>
        <service singleton="true">
            <provides>xoc.hw.ZAccessTypeProvid</provides>
            <brief>This sis first sdrevice</brief>
        </service>
    </serviceImpl>
</root>

the wanted, correct result is produced:

xoc.hw.cor.memgt.ZContentType
xoc.hw.ZAccessTypeProvid

Explanation:

  1. The only template that produces the result is the one matching provides.

  2. The second template matches any text node and has an empty body, which effectively overrides the XSLT built-in template for text nodes and prevents ("deletes") any matched text node from being output (an action that otherwise would have been performed by the XSLT built-in template).

江心雾 2024-11-13 02:07:47

这是一种方法:

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

    <xsl:output method="text"/>

    <xsl:template match="root">
        <xsl:apply-templates select="serviceImpl"/>
    </xsl:template>

    <xsl:template match="serviceImpl">
        <xsl:apply-templates select="service"/>
        <xsl:text>,</xsl:text>
    </xsl:template>

    <xsl:template match="service">
        <xsl:apply-templates select="provides"/>
    </xsl:template>

    <xsl:template match="provides">
        <xsl:value-of select="."/>
    </xsl:template>

</xsl:stylesheet>

您可能还想查看 这个问题,以及相关答案。

Here's one way of doing it:

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

    <xsl:output method="text"/>

    <xsl:template match="root">
        <xsl:apply-templates select="serviceImpl"/>
    </xsl:template>

    <xsl:template match="serviceImpl">
        <xsl:apply-templates select="service"/>
        <xsl:text>,</xsl:text>
    </xsl:template>

    <xsl:template match="service">
        <xsl:apply-templates select="provides"/>
    </xsl:template>

    <xsl:template match="provides">
        <xsl:value-of select="."/>
    </xsl:template>

</xsl:stylesheet>

You may also want to have a look at this question, and related answers.

々眼睛长脚气 2024-11-13 02:07:47

您可以使用 XSL 过滤掉如下值:(

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="//serviceImpl/provides" />
  </xsl:template>

  <xsl:template match="serviceImpl/provides">
    <xsl:value-of select="text()" />
    <xsl:text>
</xsl:text>
  </xsl:template>

</xsl:stylesheet>

顺便说一句,您的示例 XML 并非在所有地方都正确)

You can use XSL to filter out values like:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="//serviceImpl/provides" />
  </xsl:template>

  <xsl:template match="serviceImpl/provides">
    <xsl:value-of select="text()" />
    <xsl:text>
</xsl:text>
  </xsl:template>

</xsl:stylesheet>

(btw, Your example XML is not correct in all places)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文