如何使用xslt

时间:2019-02-06 20:44:05

标签: xslt

我有成堆的一些标签,没有放在任何标签中。 但我需要将其放在标签中,直到下一个序列标签到来为止

我尝试过相同的方法,但是对于每个孤立标记,它们将被放置在不同的部分,这与预期的不同

输入Xml:

<title>Info111</title>
<ul> underline<ul>
<li>list</li>
<serial>
    <em>this is for em</em>
    <title>serial title</title>
</serial>
<title>Info2222</title>
<ul> underline2222<ul>
<li>li for list</li>

我的xslt代码:

<xsl:variable name='list' select='//serial'/>

<xsl:template match='/'>

        <xsl:for-each select='$list'>
            <xsl:element name='serial'>
                <xsl:apply-templates select='*[not(name(.)="serial")]'/>

            </xsl:element>
        </xsl:for-each>

</xsl:template>

实际输出

:
<serial>
<title>Info111</title>
</serial>
<serial>
     <ul> underline<ul>
</serial>
<serial>
      <li>list</li>
</serial>
<serial>
    <em>this is for em</em>
    <title>serial title</title>
</serial>
<serial>
    <title>Info2222</title>
</serial>
<serial>
    <ul> underline2222<ul>
</serial>
<serial>
<li>li for list</li>
</serial>

预期输出:

<serial>
     <title>Info111</title>
     <ul> underline<ul>
     <li>list</li>
</serial>

<serial>
    <em>this is for em</em>
    <title>serial title</title>
</serial>

<serial>
    <title>Info2222</title>
    <ul> underline2222<ul>
    <li>li for list</li>
</serial>

请帮助我解决这个问题

2 个答案:

答案 0 :(得分:1)

如果您使用正确的术语,它将为所有人提供帮助。我认为“标签”可能意味着“元素”。 (元素实际上有两个标签,一个开始标签和一个结束标签)。最初我不知道您所说的“束”是什么意思,但是在研究您的示例时,我认为您的意思是“群体”。

您显示的输入内容不是完整的文档。在格式正确的XML中,始终有一个根元素。因此,我不知道您所说的“孤立标签”是什么意思-格式正确的XML中的每个元素都有一个父节点。

在我们讨论您的问题时,如果您在问题上放置“ xslt 1.0”或“ xslt 2.0”或“ xslt 3.0”标签(StackOverflow意义上的“标签”,而不是XML的意义),因为这通常会影响答案。

您显示的XSLT代码仅处理$ list中的元素,即名为“ serial”的元素。因此,我看不到如何获取包含Info111和Info222的输出。

为此的XSLT 2.0代码是:

<xsl:for-each-group select="*" group-adjacent="boolean(self::serial)">
  <xsl:choose>
    <xsl:when test="self::serial">
      <xsl:copy-of select="current-group()"/>
    </xsl:when>
    <xsl:otherwise>
      <serial><xsl:copy-of select="current-group()"/></serial>
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each-group>

答案 1 :(得分:0)

感谢您的回应! 现在,使用以下代码可以正常工作。

String imageUrl = BASE_URL + arrayList.get(position).getSearchUrl() + "&size=32";

            int resID = context.getResources().getIdentifier("icon", "drawable",context.getPackageName());
            if (resID == 0) {
                Log.d("TAG", "onBindViewHolder: " + resID);
                viewHolder.tvIcon.setImageResource(arrayList.get(position).getIcon());
            } else {
                Log.d("TAG", "onBindViewHolder: Glide" + resID);
                Glide.with(context)
                        .load(imageUrl)
                        .apply(requestOptions
                                .placeholder(R.drawable.default_favicon)
                                .diskCacheStrategy(DiskCacheStrategy.ALL)
                                .fitCenter())
                        .into(viewHolder.tvIcon);
            }

并且我得到了预期的输出:)