使用内联样式表

时间:2016-10-25 13:04:48

标签: java css xml xslt xunit

它不是重复的,问题不是在html中显示xml,而是显示xml,偶尔会出现单行样式表。

我正在寻找一个解决方案,在一个带有内联css的html页面中显示xml。 背景:输入数据是一个xml文件,将与java中的另一个xml文件进行比较。比较由org.custommonkey.xmlunit处理。 现在我想通过xslt转换xml,并从xunit的比较结果转换xpathes。

输入XML(多级,但对于此示例非常简化,字段更改为所有其他字段的示例)

<ROOT>    
      <MATDETAIL>
            <OUTPUT>
                  <GENERAL>
                        <CREATED_ON/>
                        <CREATED_BY>ORIGINAL USER</CREATED_BY>
                        <LAST_CHNGE/>
                        <CHANGED_BY>NEW USER</CHANGED_BY>
                  </GENERAL>
                  <RETURN>
                        <TYPE>S</TYPE>
                        <MESSAGE/>
                        <LOG_NO/>
                        <LOG_MSG_NO>000000</LOG_MSG_NO>
                  </RETURN>
            </OUTPUT>
      </MATDETAIL>  
</ROOT>

XUnit Diff Result XPath / ROOT [1] / MATDETAIL [1] / OUTPUT [1] / GENERAL [1] / CHANGED_BY [1] /文本()[1]

现在我将通过xslt(已经存在)进行翻译

我的xsl就是这样显示的

<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" mode="unescape"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ROOT[1]/MATDETAIL[1]/OUTPUT[1]/GENERAL[1]/CHANGED_BY[1]">

    <xsl:element name = "span">
        <xsl:attribute name="style">font-weight:bold; color:red </xsl:attribute>
        <xsl:copy>
            <xsl:value-of select = "current()" />
        </xsl:copy>
        <xsl:text>&lt;== Expected: dasda</xsl:text>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

这会给我这个结果

<ROOT>    
      <MATDETAIL>
            <OUTPUT>
                  <GENERAL>
                        <CREATED_ON/>
                        <CREATED_BY>ORIGINAL USER</CREATED_BY>
                        <LAST_CHNGE/>
                        <span style="font-weight:bold; color:red "><CHANGED_BY>NEW USER</CHANGED_BY>&lt;== Expected: ORIGINAL USER</span>
                  </GENERAL>
                  <RETURN>
                        <TYPE>S</TYPE>
                        <MESSAGE/>
                        <LOG_NO/>
                        <LOG_MSG_NO>000000</LOG_MSG_NO>
                  </RETURN>
            </OUTPUT>
      </MATDETAIL>  
</ROOT>

但是我无法正确地在html中显示这个xml(使用样式表)。 要么我没有标签,所以要看到xml strcuture非常复杂 我也得到了xml结构但没有样式表。

我喜欢在网络服务中显示与两个文件的xunit相比较的结果,这也是彩色的,这样您就可以轻松查看哪些元素发生了变化或不正确。

问题是显示完整的xml +,这似乎是使用样式表为条目着色的真正问题。我可以显示xml,但没有内联样式表,或者我可以显示样式文本但不能同时显示两者。

我已经尝试在xslt中替换lt和gt但是失败了。 我试图通过示例java替换rseult中的lt和gt。所以每个lt和gt都是html编码的标签。但结果显示非常难看。我的同事意味着我们不能以任何方式使用它。 我尝试通过css&gt;设置xml的样式;每个标签定义。 但结构和字段是动态完整的,所以我不能为每个标记或字段定义css。另一方面,每个字段都可以是正确的还是错误的,还取决于要比较的xml文件。所以改变的字段是在第一个比较正确,但在另一个比较错误的

不幸的是,替代实施不是一种选择。我必须以某种方式用我可用的方法做到这一点。 (Java,XML&amp; XSL,JS,HTML,CSS)。

我希望得到好的想法来解决这个问题。

我想提前感谢你。

2 个答案:

答案 0 :(得分:0)

您可以使用XSLT将xml转换为HTML,以便在浏览器中显示它。或者构建一个JS客户端,从服务器解析XML并显示它。这就像angularjs。

答案 1 :(得分:0)

我不确定理解你的要求。 如果要以HTML格式显示XML,可以将其插入PRE标记:<pre><ROOT>...</ROOT></pre>

如果要显示XML,因为它可以通过HTML / XML编辑器显示,您可以使用Ace:https://ace.c9.io/#nav=about

其他选项但尚未尝试:https://highlightjs.org