Javascript 如何将XML转换为XML客户端

Javascript 如何将XML转换为XML客户端,javascript,html,xml,xslt,Javascript,Html,Xml,Xslt,问题-需要将XML文件转换为新的XML文件(过滤掉一些垃圾) 当前场景-当客户端从软件运行HTML报告时,我们的程序会创建一个XML文件(已经编写了使用Javascript加载XSL和XML转换的HTML文件) 目前,上述场景仅适用于创建HTML,但我现在需要输出为XML,每次我尝试在IE中查看此HTML文件时,因为这是生成转换的开始,我只得到节点答案,没有XML树。。我错过了什么 从软件加载的示例HTML文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT

问题-需要将XML文件转换为新的XML文件(过滤掉一些垃圾)

当前场景-当客户端从软件运行HTML报告时,我们的程序会创建一个XML文件(已经编写了使用Javascript加载XSL和XML转换的HTML文件)

目前,上述场景仅适用于创建HTML,但我现在需要输出为XML,每次我尝试在IE中查看此HTML文件时,因为这是生成转换的开始,我只得到节点答案,没有XML树。。我错过了什么

从软件加载的示例HTML文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
  <head>
    <link href="Common/CMStyles.css" rel="stylesheet" type="text/css" />
    <script language="JavaScript" src="ReportHeader.js"></script>

  </head>
  <body onload="displayResult('sample.xsl');">
    <div id="report"></div>
  </body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<Report schema="1.0">
   <Item name="cabinet" id="1" />
   <Item name="cabinet" id="2" />
   <Item name="cabinet" id="3" />
   <DocumentProperties>
      <PageProperties name="Page 1" pagenum="1" />
      <Paths>
         <Data>C:\Data\</Data>
         <Library>C:\Library\</Library>
         <Table>C:\Table\</Table>
         <Picture>C:\Bitmap\</Picture>
         <Report>C:\Report\</Report>
         <Template>C:\Template\</Template>
         <Backup>C:\Backup\</Backup>
         <Program>C:\</Program>
      </Paths>
      <Application>
         <Product>CabPro</Product>
         <Family>Software</Family>
         <Version>8.0.61.2700</Version>
         <Build>2013.10.4.0</Build>
         <Desc />
         <Company>Q1</Company>
         <Account>QSystems Pty Ltd</Account>
      </Application>
   </DocumentProperties>
</Report>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml" version="1.0" encoding="iso-8859-1"/>


    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="@*|DocumentProperties/Paths"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>
示例XML文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
  <head>
    <link href="Common/CMStyles.css" rel="stylesheet" type="text/css" />
    <script language="JavaScript" src="ReportHeader.js"></script>

  </head>
  <body onload="displayResult('sample.xsl');">
    <div id="report"></div>
  </body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<Report schema="1.0">
   <Item name="cabinet" id="1" />
   <Item name="cabinet" id="2" />
   <Item name="cabinet" id="3" />
   <DocumentProperties>
      <PageProperties name="Page 1" pagenum="1" />
      <Paths>
         <Data>C:\Data\</Data>
         <Library>C:\Library\</Library>
         <Table>C:\Table\</Table>
         <Picture>C:\Bitmap\</Picture>
         <Report>C:\Report\</Report>
         <Template>C:\Template\</Template>
         <Backup>C:\Backup\</Backup>
         <Program>C:\</Program>
      </Paths>
      <Application>
         <Product>CabPro</Product>
         <Family>Software</Family>
         <Version>8.0.61.2700</Version>
         <Build>2013.10.4.0</Build>
         <Desc />
         <Company>Q1</Company>
         <Account>QSystems Pty Ltd</Account>
      </Application>
   </DocumentProperties>
</Report>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml" version="1.0" encoding="iso-8859-1"/>


    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="@*|DocumentProperties/Paths"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

C:\数据\
C:\图书馆\
C:\表\
C:\位图\
C:\报告\
C:\模板\
C:\备份\
C:\
卡普洛
软件
8.0.61.2700
2013.10.4.0
Q1
QSystems私人有限公司
示例XSL文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
  <head>
    <link href="Common/CMStyles.css" rel="stylesheet" type="text/css" />
    <script language="JavaScript" src="ReportHeader.js"></script>

  </head>
  <body onload="displayResult('sample.xsl');">
    <div id="report"></div>
  </body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<Report schema="1.0">
   <Item name="cabinet" id="1" />
   <Item name="cabinet" id="2" />
   <Item name="cabinet" id="3" />
   <DocumentProperties>
      <PageProperties name="Page 1" pagenum="1" />
      <Paths>
         <Data>C:\Data\</Data>
         <Library>C:\Library\</Library>
         <Table>C:\Table\</Table>
         <Picture>C:\Bitmap\</Picture>
         <Report>C:\Report\</Report>
         <Template>C:\Template\</Template>
         <Backup>C:\Backup\</Backup>
         <Program>C:\</Program>
      </Paths>
      <Application>
         <Product>CabPro</Product>
         <Family>Software</Family>
         <Version>8.0.61.2700</Version>
         <Build>2013.10.4.0</Build>
         <Desc />
         <Company>Q1</Company>
         <Account>QSystems Pty Ltd</Account>
      </Application>
   </DocumentProperties>
</Report>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml" version="1.0" encoding="iso-8859-1"/>


    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="@*|DocumentProperties/Paths"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

期望:从以上所有内容中,我期望在HTML浏览器中看到XML树过滤掉多余的内容,并显示剩余路径的树

实际结果。。。在我看来有点像这样。。 C:\Data\C:\Library\C:\Table\C:\Bitmap\C:\Report\C:\Template\C:\Backup\C:\

*注意没有XML树


我是不是遗漏了什么?或者有人提出了一些建议来尝试让它工作,它必须在客户端完成。

我这里没有xslt编辑器来检查,但您尝试过这个吗

<xsl:copy-of select="@*|node()"/>

而不是

<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>


我会在这两个模板上都尝试一下。

我想这里还有一点需要注意:只要我能触发一个包含信息的文件,并用一个*.xmlOk为它指定一个下载位置,我就不介意看到输出的XML,我已经测试并玩了一整天了。事实证明,我一直在获得正确的XML输出,但浏览器没有向我显示标记,因为它不知道如何处理它们。所以我需要做的是忽略我看不到输出的事实,因为输出的视觉外观并不重要,我需要的是保存输出的能力,所以我需要一种方法,让用户能够点击按钮并将转换后的XML保存到他们的计算机上。您可能想看看Saxon CE来编写此类应用程序。但是,Saxon CE没有XML序列化程序(可以将XML从树表示转换为尖括号表示),而且在任何情况下,将文件从浏览器保存到本地计算机的文件存储的能力都非常依赖于浏览器安全设置。感谢您的建议,但是这看起来也像是我已经考虑过的一个类似的想法,它涉及到在客户端提供PHP来处理额外的请求,但是对于我正在尝试做的事情来说,这不是很实际。。这是非常不幸的。我们无法在客户端安装更多的程序。