Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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
如何使用XSLT将xml转换为具有xml标记和属性的html,作为具有等效树的html的文本?_Html_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

如何使用XSLT将xml转换为具有xml标记和属性的html,作为具有等效树的html的文本?

如何使用XSLT将xml转换为具有xml标记和属性的html,作为具有等效树的html的文本?,html,xml,xslt,xslt-1.0,Html,Xml,Xslt,Xslt 1.0,我想我从来没有问过这样一个标题令人费解的问题,对此我很抱歉 假设我拥有的XML文件看起来不是我不想复制/粘贴的,而是太大了: <A attr1="aaa" attr2="bbb"> <B attr8="23156"> <C attr10="bla"/> <C attr10="bli"/> <C attr10="blo"/> </B> </A> <

我想我从来没有问过这样一个标题令人费解的问题,对此我很抱歉

假设我拥有的XML文件看起来不是我不想复制/粘贴的,而是太大了:

<A attr1="aaa" attr2="bbb">
    <B attr8="23156">
        <C attr10="bla"/>
        <C attr10="bli"/>
        <C attr10="blo"/>
    </B>
</A>
<A attr1="jhg" attr2="ygyug">
    <B attr8="126">
        <C attr10="bla"/>
    </B>
    <B attr8="102">
        <C attr10="bla"/>
        <C attr10="blo"/>
    </B>
</A>
好吧,你明白了,一个通用的XML文件。我不知道标签、标签顺序和属性。 我必须使用XSLT将此XML转换为HTML文件,并将XML的所有节点和属性作为文本,放在一个等价的树中:

<div>
    &lt;A attr1="aaa" attr2="bbb"&gt;
    <div>
        &lt;B attr8="23156"&gt;
        <div>&lt;C attr10="bla"/&gt;</div>
        <div>&lt;C attr10="bli"/&gt;</div>
        <div>&lt;C attr10="blo"/&gt;</div>
    </div>
</div>
<div>
    &lt;A attr1="jhg" attr2="ygyug"&gt;
    <div>
        &lt;B attr8="126"&gt;
        <div>&lt;C attr10="bla"/&gt;</div>
    </div>
    <div>
        &lt;B attr8="102"&gt;
        <div>&lt;C attr10="bla"/&gt;</div>
        <div>&lt;C attr10="blo"/&gt;</div>
    </div>
</div>
我可以通过选择//node来获取每个节点的名称,也可以通过选择@*来获取属性,但我不知道如何按照预期获取html


如果您能提供任何帮助,我们将不胜感激:D将以下XSLT应用于您的示例将产生预期的结果,并且在斜杠字符之前的空格中有细微的差异

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
  <xsl:template match="*">
    <div>
     &lt;<xsl:value-of select="name()"/><xsl:value-of select="' '"/><xsl:apply-templates select="@*"/><xsl:apply-templates select="." mode="close-if-leaf"/>&gt;
     <xsl:apply-templates select="*"/>
    </div>
  </xsl:template>

  <xsl:template match="*" mode="close-if-leaf">
    <xsl:if test="count(*) = 0">/</xsl:if>
  </xsl:template>

  <xsl:template match="@*">
    <xsl:value-of select="name()"/>=&quot;<xsl:value-of select="."/>&quot;<xsl:value-of select="' '"/>
  </xsl:template>

</xsl:stylesheet>

很好,这正是我需要的,谢谢你!我今天否认了关闭叶模式: