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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Xml 在XSL中匹配属性值后提取值_Xml_Xslt - Fatal编程技术网

Xml 在XSL中匹配属性值后提取值

Xml 在XSL中匹配属性值后提取值,xml,xslt,Xml,Xslt,我有以下XML文件: <?xml version="1.0" encoding="UTF-8"?> <response> <result name="response" numFound="10000" start="0"> <doc> <str name="Title">Title 1</str> <str name="GUID">IMG_1</str>

我有以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
 <response>
<result name="response" numFound="10000" start="0">
    <doc>
        <str name="Title">Title 1</str>
        <str name="GUID">IMG_1</str>
        <str name="Desc">Desc 1</str>
    </doc>
    <doc>
        <str name="Title">Title 2</str>
        <str name="GUID">IMG_2</str>
        <str name="Desc">Desc 2</str>
    </doc>
</result>
</response>

我对任何帮助都很感激,因为我是新手

您的xlst中只有一些小错误。 因为模板文档中变量选择的当前节点是文档元素,所以必须删除
doc/

<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="guid" select="str[@name='GUID']"/>
<xsl:variable name="desc" select="str[@name='Desc']"/>

要将变量值添加到链接,请使用:

<img src="http://myserver/images/{$guid}" />

因此,请尝试:

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
    <xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/>

    <xsl:template match='/'>
        <html>
            <head> </head>
            <body>
                <table border="1">
                    <xsl:apply-templates select="response/result/doc"/>
                </table>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="doc">
        <xsl:variable name="title" select="str[@name='Title']"/>
        <xsl:variable name="guid" select="str[@name='GUID']"/>
        <xsl:variable name="desc" select="str[@name='Desc']"/>
        <tr>
            <td colspan="2">
                <xsl:value-of select="$title"/>
            </td>
        </tr>
        <tr>
            <td>
                <img src="http://myserver/images/{$guid}" />
            </td>
            <td>
                <xsl:value-of select="$desc"/>
            </td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

你就快到了,你刚刚添加了一个额外的“doc/”

因为你正在使用

<xsl:template match="doc">

一切都与文档相关,因此您只需

<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="guid" select="str[@name='GUID']"/>
<xsl:variable name="desc" select="str[@name='Desc']"/>

您是如何尝试执行此操作的。是在浏览器转换中还是在服务器端(有服务器)进行转换。谢谢madhav。现在我正在VisualStudio中进行这项工作,但这与转换如何发生无关。不管怎样,下面的解决方案帮助了我。谢谢你。这很有效。我刚刚编辑了您的解决方案的
标记,因为如果没有它,它的输出中通常有
$guid
<xsl:template match="doc">
<xsl:variable name="title" select="str[@name='Title']"/>
<xsl:variable name="guid" select="str[@name='GUID']"/>
<xsl:variable name="desc" select="str[@name='Desc']"/>