Xslt 每个循环的XSL都不起作用

Xslt 每个循环的XSL都不起作用,xslt,Xslt,我正在使用Java将XML文档转换为文本: Transformer transformer = tFactory.newTransformer(stylesource); transformer.transform(source, result); 除非XML文档中有冒号,否则这似乎是可行的。我试过这个例子: XML文件: <?xml version="1.0" encoding="UTF-8"?> <test:TEST > <one.two:three id

我正在使用Java将XML文档转换为文本:

Transformer transformer = tFactory.newTransformer(stylesource);
transformer.transform(source, result);
除非XML文档中有冒号,否则这似乎是可行的。我试过这个例子: XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<test:TEST >
  <one.two:three id="my id" name="my name" description="my description" >
  </one.two:three>
  <one.two:three id="some id" name="some name" description="some description" />
</test:TEST>
我期待4行输出

inFirstLoop
inFirstLoop
inSecondLoop
inSecondLoop

我该如何解决这个问题?非常感谢您的帮助。谢谢。

这里有很多错误。我很惊讶您的转换竟然能够运行,而不是在解析错误和其他错误上失败

一个大问题是,输入XML使用名称空间前缀(冒号就是用来表示名称空间前缀的),而没有声明它们。声明如

 xmlns:one.two="http://www.one.two/one.two:three"
需要在源XML和XSL中。否则,源XML的格式不正确(根据命名空间规则)

第二个问题是XPath表达式

./$myVariable
应该抛出一个错误。我想你想要的是

*[name() = $myVariable]
我要做的第三个更改不是XSLT中的错误,而是做事情的糟糕方式。。。如果要匹配
,则应使用名称空间工具来引用名称空间。因此,

<xsl:template match="*[substring(name(),1,9)='test:TEST']" >

XML名称空间,就像驾驶汽车一样,是一个通过少量培训而不是反复试验学习的主题。这将有助于您避免今后的许多困惑和痛苦。

非常感谢。我做了你建议的改变,效果很好。这是我第一次尝试将xml文档转换为txt,但我并不真正知道发生了什么。我不是个技术高手。关于:xmlns:test=“…test…”的一个问题是,我把它放在xsl文件中,您认为“…test…”是指其他内容吗?再次感谢。@user1607902:By
“…test…”
我的意思是不管名称空间URI是什么,也可以是任何字符串,只要XML输入文档和XSL样式表对
元素使用相同的名称空间URI。(它们不必使用相同的名称空间前缀,
test:
,但这确实让人类更容易使用。)
*[name() = $myVariable]
<xsl:template match="*[substring(name(),1,9)='test:TEST']" >
<xsl:template match="test:TEST">
xmlns:test="...test..."