为什么我必须关闭 XSL 中的 <br> 标记?

ka3*_*3ak 2 html java tags xslt

我有时会做 XSLT。所以我可能有些不明白。

不确定是否需要示例,但这里是: XML 非常简单:

<a></a>
Run Code Online (Sandbox Code Playgroud)

XSL:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"/>
  <xsl:template match="/">
    <xsl:apply-templates select="a"/>
  </xsl:template>
  <xsl:template match="a">
    <html>
      <head>
        <title>Title</title>
      </head>
      <body><br></body>
    </html>
  </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

Java代码:

public static String transform(String xml, String xsl) throws TransformerException {

    StreamSource xslT = new StreamSource(new StringReader(xsl));

    TransformerFactory tFactory = TransformerFactory.newInstance();

    Transformer transformer = tFactory.newTransformer(xslT);

    StreamSource source = new StreamSource(new StringReader(xml));

    StringWriter out = new StringWriter();
    StreamResult result = new StreamResult(out);

    transformer.transform(source, result);
    return out.toString();

}
Run Code Online (Sandbox Code Playgroud)

我认为如果我html在样式表中使用输出类型,那么它应该被识别<br>为有效的 html 标签。

一般来说...为什么它关心 html 有效性呢?我还注意到,如果我声明一个变量。例如:

<xsl:variable name="someTable">
<table class="common" bgcolor="#DDDDDD">
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

会报同样的错误。

我的目标不是创建无效的 html。我只想声明一个变量(我将<table>根据稍后某处的处理逻辑关闭)。
有没有办法解决这个问题,或者我必须使用它text作为输出类型。

mic*_*57k 5

如果输出方法是html,则处理器将输出<br/><br>。但是,输入和样式表都必须是格式正确的XML文档。

至于您关于变量的问题:您不能 在变量中仅存储开始标签。您必须存储整个元素(此时仅作为抽象存在,并且没有标签)。

如果您发现自己“需要”存储一个开始标签,您将“根据稍后某处的处理逻辑关闭它”,那么您需要重新考虑您的方法。这不是找到解决方法的问题;而是问题。XSLT 并不是这样工作的。