gpt4 book ai didi

java - 无法通过 JAVA 运行 XSLT,并且输出中观察到结果为空

转载 作者:行者123 更新时间:2023-12-02 10:29:45 25 4
gpt4 key购买 nike

我只想从 XML 文件中获取一段标签,并且我正在使用它 XSLT。

XSLT:

  <xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/><xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:strip-space elements="*"/>
<xsl:template match="/testng-results">
<xsl:copy-of select="class/test-method[@status='PASS']"/>
</xsl:template></xsl:stylesheet>

Input.XML

<?xml version="1.0" encoding="UTF-8"?>
<testng-results skipped="0" failed="0" total="10" passed="10">
<class name="com.transfermoney.Transfer">
<test-method status="PASS" name="setParameter" is-config="true" duration-ms="4"
started-at="2018-08-16T21:43:38Z" finished-at="2018-08-16T21:43:38Z">
<params>
<param index="0">
<value>
<![CDATA[org.testng.TestRunner@31c2affc]]>
</value>
</param>
</params>
<reporter-output>
</reporter-output>
</test-method> <!-- setParameter -->
</class>
<class name="com.transfermoney.Transfer">
<test-method status="FAIL" name="setSettlementFlag" is-config="true" duration-ms="5"
started-at="2018-08-16T21:44:55Z" finished-at="2018-08-16T21:44:55Z">
<reporter-output>
<line>
<![CDATA[runSettlement Value Set :false]]>
</line>
</reporter-output>
</test-method> setSettlementFlag
</class>
</testng-results>

JAVA代码:

public static void main(String[] args) throws Exception {
String XML = fetchDataFrmXML(".//Test//testng-results_2.xml");
Transformer t = TransformerFactory.newInstance().newTransformer(new StreamSource(new File(".//Test//Cut.xslt")));
t.transform(new StreamSource(new StringReader(XML)), new StreamResult(new File(".//Test//Sample1.xml")));
}

预期输出:

  <test-method status="PASS" name="setParameter" is-config="true" duration-ms="4" started-at="2018-08-16T21:43:38Z" finished-at="2018-08-16T21:43:38Z">
<params>
<param index="0">
<value>
<![CDATA[runSettlement Value Set :false]]>
</value>
</param>
</params>
<reporter-output/>
</test-method>

FetchXML:

  public static String fetchDataFrmXML(String fileLocation) throws Exception 
{
file = new File(fileLocation);
fr = new FileReader(file);
br = new BufferedReader(fr);
String temp;
String result = "";
while ((temp = br.readLine()) != null) {
result += temp;
}

br.close();
return result;
}

运行 JAVA 类文件后,我得到空的 example1.xml 文件。但是,如果我只是通过在线编辑器运行相同的 XSLT 脚本,它就会给出预期的结果。

我的 java 文件执行 XSLT 时是否存在问题?请帮我解决这个问题。

最佳答案

你的代码对我有用。我唯一改变的是:

  • 声明 fetchDataFromXML() 方法中使用的变量
  • 在样式表中的 version="1.0"之后添加缺失的空格
  • 更改文件名。

我添加了这一行

System.err.println(t.getClass().getName());

识别所使用的 XSLT 引擎;输出是

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl

您可能也想这样做。

更仔细地查看输出,它显示状态为“PASS”的记录,这是代码所选择的记录,尽管您说您想要状态为“FAIL”的记录。

关于 fetchDataFrmXML() 方法的注意事项:通过这种方式重复字符串连接来构建字符串内容的效率非常低。请改用 StringBuilder。

(我曾经通过向客户指出这个错误,为自己赚取了 1 万美元的咨询费,结果客户可能节省了 100 万美元的硬件成本)。

关于java - 无法通过 JAVA 运行 XSLT,并且输出中观察到结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53679291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com