如何使用XSLT将标签的值转换为纯文本

拉多斯瓦夫·克拉西米罗

嗨,这是XML文件(请从下面复制),我必须从该文件中提取元素中的字符串并将其附加到纯文本中。我需要提取的数据是此标记中的字符串:

<XPD:ATTR name="Name" type="string">Bae, Rankyoung1</XPD:ATTR>

Bae, Rankyong1

附加到纯文本上的另一个字符串是由相同标签包围到文档中的字符串:

<XPD:ATTR name="Text" type="string">Jung, Yoontae</XPD:ATTR>

我希望输出文档如下所示:

Bae, Rankyoung1
Jung, Yoontae

我是XML XSLT转换的新手。您能帮我创建XSLT文件吗?

编辑,以供将来参考,这是输入XML的副本:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="XSL_example.xsl"?>   <!-- RMRD -->
<XPD:PROJECT xmlns:XPD="http://www.staruml.com" version="1">
    <XPD:HEADER>
        <XPD:SUBUNITS/>
        <XPD:PROFILES/>
    </XPD:HEADER>
    <XPD:BODY>
        <XPD:OBJ name="DocumentElement" type="UMLProject" guid="XuQeQOs7pUqu5iNMXzIipQAA">
            <XPD:ATTR name="Title" type="string">Untitled</XPD:ATTR>
            <XPD:ATTR name="#OwnedElements" type="integer">1</XPD:ATTR>
            <XPD:OBJ name="OwnedElements[0]" type="UMLPackage" guid="J9e+bcLT8UWj0V0+3CBnEQAA">
                <XPD:ATTR name="Name" type="string">Package1</XPD:ATTR>
                <XPD:REF name="Namespace">XuQeQOs7pUqu5iNMXzIipQAA</XPD:REF>
                <XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
                <XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="pzzwsHWd/0Czibg1/CI/HgAA">
                    <XPD:ATTR name="Name" type="string">ClassDiagram1</XPD:ATTR>
                    <XPD:REF name="DiagramOwner">J9e+bcLT8UWj0V0+3CBnEQAA</XPD:REF>
                    <XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="57OItj9oa0ydbjXPOUGk8QAA">
                        <XPD:REF name="Diagram">pzzwsHWd/0Czibg1/CI/HgAA</XPD:REF>
                        <XPD:ATTR name="#OwnedViews" type="integer">2</XPD:ATTR>
                        <XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="KhrtWhesJES940zMm2hLeAAA">
                            <XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
                            <XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
                            <XPD:ATTR name="Left" type="integer">596</XPD:ATTR>
                            <XPD:ATTR name="Top" type="integer">120</XPD:ATTR>
                            <XPD:ATTR name="Width" type="integer">108</XPD:ATTR>
                            <XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
                            <XPD:REF name="Model">iw3rcr37H0q7LUsnJ1pOKgAA</XPD:REF>
                            <XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="yxCuVE2uHUWJoVlcgrNI1QAA">
                                <XPD:OBJ name="NameLabel" type="LabelView" guid="LeQVjq8jY0mAgcW4FGjR/gAA">
                                    <XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
                                    <XPD:ATTR name="Text" type="string">Bae, Rankyoung1</XPD:ATTR>
                                </XPD:OBJ>
                                <XPD:OBJ name="StereotypeLabel" type="LabelView" guid="0fDlWFOPRUOyIROG9pCBXQAA">
                                    <XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
                                </XPD:OBJ>
                                <XPD:OBJ name="PropertyLabel" type="LabelView" guid="HHOXIA2NX0qAIcuib8OmDwAA">
                                    <XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
                                </XPD:OBJ>
                            </XPD:OBJ>
                            <XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="rsTdbVSS0UCho8yd1rZVDgAA">
                                <XPD:REF name="Model">iw3rcr37H0q7LUsnJ1pOKgAA</XPD:REF>
                            </XPD:OBJ>
                            <XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="jk1MzMH9g02eNnXGdAfgkAAA">
                                <XPD:REF name="Model">iw3rcr37H0q7LUsnJ1pOKgAA</XPD:REF>
                            </XPD:OBJ>
                            <XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="uBpN+trdlE2kUjLuESmL4gAA">
                                <XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
                                <XPD:REF name="Model">iw3rcr37H0q7LUsnJ1pOKgAA</XPD:REF>
                            </XPD:OBJ>
                        </XPD:OBJ>
                        <XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="qt8J5Puh40i6LWsBhcDi5wAA">
                            <XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
                            <XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
                            <XPD:ATTR name="Left" type="integer">592</XPD:ATTR>
                            <XPD:ATTR name="Top" type="integer">184</XPD:ATTR>
                            <XPD:ATTR name="Width" type="integer">90</XPD:ATTR>
                            <XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
                            <XPD:REF name="Model">9zUnZZRwUkalv3A3uj6OkwAA</XPD:REF>
                            <XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="tBTjG3c61EKTbuMvBTPvuAAA">
                                <XPD:OBJ name="NameLabel" type="LabelView" guid="/MxPkci6uEiPYGh3lLpBdAAA">
                                    <XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
                                    <XPD:ATTR name="Text" type="string">Jung, Yoontae</XPD:ATTR>
                                </XPD:OBJ>
                                <XPD:OBJ name="StereotypeLabel" type="LabelView" guid="f3Q59HwThUOqGZOX11HOKAAA">
                                    <XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
                                </XPD:OBJ>
                                <XPD:OBJ name="PropertyLabel" type="LabelView" guid="b/yOcqoLUEmVjPBTE+R8mQAA">
                                    <XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
                                </XPD:OBJ>
                            </XPD:OBJ>
                            <XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="jxiEXdW7P0irEuL7UpZBgQAA">
                                <XPD:REF name="Model">9zUnZZRwUkalv3A3uj6OkwAA</XPD:REF>
                            </XPD:OBJ>
                            <XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="W0p9UA3RFEGPMLpTCCcmUgAA">
                                <XPD:REF name="Model">9zUnZZRwUkalv3A3uj6OkwAA</XPD:REF>
                            </XPD:OBJ>
                            <XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="TyOXV+wPyUqj9WLOySoADAAA">
                                <XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
                                <XPD:REF name="Model">9zUnZZRwUkalv3A3uj6OkwAA</XPD:REF>
                            </XPD:OBJ>
                        </XPD:OBJ>
                    </XPD:OBJ>
                </XPD:OBJ>
                <XPD:ATTR name="#OwnedElements" type="integer">2</XPD:ATTR>
                <XPD:OBJ name="OwnedElements[0]" type="UMLClass" guid="iw3rcr37H0q7LUsnJ1pOKgAA">
                    <XPD:ATTR name="Name" type="string">Bae, Rankyoung1</XPD:ATTR>
                    <XPD:REF name="Namespace">J9e+bcLT8UWj0V0+3CBnEQAA</XPD:REF>
                    <XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
                    <XPD:REF name="Views[0]">KhrtWhesJES940zMm2hLeAAA</XPD:REF>
                    <XPD:REF name="Views[1]">rsTdbVSS0UCho8yd1rZVDgAA</XPD:REF>
                    <XPD:REF name="Views[2]">jk1MzMH9g02eNnXGdAfgkAAA</XPD:REF>
                    <XPD:REF name="Views[3]">uBpN+trdlE2kUjLuESmL4gAA</XPD:REF>
                </XPD:OBJ>
                <XPD:OBJ name="OwnedElements[1]" type="UMLClass" guid="9zUnZZRwUkalv3A3uj6OkwAA">
                    <XPD:ATTR name="Name" type="string">Jung, Yoontae</XPD:ATTR>
                    <XPD:REF name="Namespace">J9e+bcLT8UWj0V0+3CBnEQAA</XPD:REF>
                    <XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
                    <XPD:REF name="Views[0]">qt8J5Puh40i6LWsBhcDi5wAA</XPD:REF>
                    <XPD:REF name="Views[1]">jxiEXdW7P0irEuL7UpZBgQAA</XPD:REF>
                    <XPD:REF name="Views[2]">W0p9UA3RFEGPMLpTCCcmUgAA</XPD:REF>
                    <XPD:REF name="Views[3]">TyOXV+wPyUqj9WLOySoADAAA</XPD:REF>
                </XPD:OBJ>
            </XPD:OBJ>
        </XPD:OBJ>
    </XPD:BODY>
</XPD:PROJECT>
亚伯

尽管诸如“您能为我做X”之类的问题通常不在SO的范围之内,但任务足够简单,我希望通过展示其完成方式,您可以了解XSLT的工作原理:

<!-- make sure to output text -->
<xsl:output method="text" />

<!-- a shallow-skip template, will continue to process children
 but won't output anything itself -->
<xsl:template match="node() | @*">
    <xsl:apply-templates />
</xsl:template>

<!-- match the nodes you are interested in -->
<xsl:template match="XPD:ATTR">
    <!-- add value of the node, i.e. its text -->
    <xsl:value-of select="." />
    <!-- and a newline -->
    <xsl:text>&#xA;</xsl:text>
</xsl:template>

如果只想匹配您提到的名称,则可以按照以下方式更新匹配的模板:

<xsl:template match="XPD:ATTR[. = 'Bae, Rankyoung1' or . = 'Jung, Yoontae']">
    <!-- same as above -->
</xsl:template>

注意:为简便起见,我省略了根目录<xsl:stylesheet...和名称空间绑定,您应该添加它们以使此代码正常工作。该代码可与XSLT 1.0,XSLT 2.0和XSLT 3.0一起正常使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章