标签: node-set

querySelectorAll:操纵节点

据我所知,querySelector返回一个真正的可更改元素,同时querySelectorAll返回一个非实时静态节点集.

我想调整适合特定选择器的所有元素的样式.它适用于第一个元素querySelector,但不适用于所有匹配元素querySelectorAll.我猜那是因为节点集是非实时的.

有解决方法吗?或者我错过了什么?

javascript dom-manipulation node-set

8
推荐指数
2
解决办法
6576
查看次数

XSL msxsl:节点集问题

请帮帮我们.我只是想声明一个简单的结果树片段并迭代它.


...

<xsl:variable name="rtf">
  <item-list>
    <item id="1">one</item>
    <item id="2">two</item>
    <item id="3">three</item>
    <item id="4">four</item>
  </item-list>
</xsl:variable>

<xsl:for-each select="msxsl:node-set($rtf)/item-list/item">
  <xsl:value-of select="@id"/>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

...


我完全错误地认为这是如何工作的?


编辑: 我正在使用.NET XslCompiledTransform并具有正确的msxsl名称空间声明 - xmlns:msxsl ="urn:schemas-microsoft-com:xslt"

转换执行得很好 - 问题是什么都没有输出

xslt node-set

5
推荐指数
1
解决办法
6881
查看次数

结果树片段到节点集:所有xsl引擎的通用方法

回答另一个线程(参见stackoverflow:生成css颜色方案)我遇到了下面的问题,其中不同的xsl引擎似乎需要不同的方法将结果树片段转换为节点集.

简化问题(但请参阅上面的链接以了解此背后的完整故事),我希望有一个包含颜色值列表的内联树.由于必须在Xpath表达式中使用,我必须专门为MSXML xx xsl引擎创建一个节点集(内置的XML Spy在解释构造为rtf的变量的Xpath表达式时遇到的麻烦较少).
另一个线程stackoverflow:automating-exsltnode-set帮助我.生成的节点集用于从输入XML创建新变量rtf.
同样,MSXML在Xpath表达式中使用新变量时会抱怨,所以我使用了node-set函数从中创建了一个节点集.
到目前为止一直很好,MSXML xx不再出错.
但是当我在XML Spy内置或Saxon 9he中运行相同时,我得到另一个错误:似乎节点集函数未知:

Cannot find a matching 1-argument function named {urn:schemas-microsoft-com:xslt}node-set() in variable colorList
Run Code Online (Sandbox Code Playgroud)

请注意,在这个特定的例子中不需要这种两步法,但正如我所说的,我简化了一些事情; 我只想知道如何编写一个适用于所有xsl引擎的XSLT 1.0转换.

我使用的XSLT:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:std="http://whatever"
    xmlns:exslt="urn:schemas-microsoft-com:xslt"
    exclude-result-prefixes="std exslt">

    <xsl:output method="xml" indent="yes"/>

    <std:colors>
        <color>#0000FF</color>
        <color>#FF0000</color>
    </std:colors>

    <xsl:variable name="colors" select="document('')/*/std:colors"/>

    <xsl:variable name="std:colorList">
        <xsl:for-each select="//testid">
            <xsl:variable name="pos" select="position() mod 2"/>
            <xsl:element name="color">
                <xsl:attribute name="testid"><xsl:value-of select="."/></xsl:attribute>
                <xsl:value-of select="$colors/color[$pos + 1]"/>
            </xsl:element>
        </xsl:for-each>
    </xsl:variable>

    <xsl:variable name="colorList" select="exslt:node-set($std:colorList)"/>

    <xsl:template match="/">
        <output>
            <xsl:copy-of …
Run Code Online (Sandbox Code Playgroud)

xslt msxml saxon node-set

5
推荐指数
2
解决办法
7925
查看次数

为同一复杂类型的不同节点名称调用相同的xsl:template

我正在尝试保留我的xsl DRY,因此我想为XML文档的2个部分调用相同的模板,这些部分碰巧是相同的复杂类型(ContactDetails和AltContactDetails).给出以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<RootNode>
    <Name>Bob</Name>
    <ContactDetails>
        <Address>
            <Line1>1 High Street</Line1>
            <Town>TownName</Town>
            <Postcode>AB1 1CD</Postcode>
        </Address>
        <Email>test@test.com</Email>
    </ContactDetails>
    <AltContactDetails>
        <Address>
            <Line1>3 Market Square</Line1>
            <Town>TownName</Town>
            <Postcode>EF2 2GH</Postcode>
        </Address>
        <Email>bob@bob.com</Email>
    </AltContactDetails>
</RootNode>
Run Code Online (Sandbox Code Playgroud)

我写了一个XSL样式表,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <PersonsName>
            <xsl:value-of select="RootNode/Name"/>
        </PersonsName>
        <xsl:call-template name="ContactDetails">
            <xsl:with-param name="data"><xsl:value-of select="RootNode/ContactDetails"/></xsl:with-param>
            <xsl:with-param name="elementName"><xsl:value-of select="'FirstAddress'"/></xsl:with-param>
        </xsl:call-template>
        <xsl:call-template name="ContactDetails">
            <xsl:with-param name="data"><xsl:value-of select="RootNode/AltContactDetails"/></xsl:with-param>
            <xsl:with-param name="elementName"><xsl:value-of select="'SecondAddress'"/></xsl:with-param>
        </xsl:call-template>
    </xsl:template>
    <xsl:template name="ContactDetails">
        <xsl:param name="data"></xsl:param>
        <xsl:param name="elementName"></xsl:param>
        <xsl:element name="{$elementName}">
            <FirstLine>
                <xsl:value-of select="$data/Address/Line1"/>
            </FirstLine>

            <Town>
                <xsl:value-of select="$data/Address/Town"/>
            </Town>
            <PostalCode>
                <xsl:value-of …
Run Code Online (Sandbox Code Playgroud)

xslt templates node-set

3
推荐指数
1
解决办法
4802
查看次数

XSLT从变量创建节点名称

当我有这两个变量

<xsl:variable name="a" select="'Total'" />
<xsl:variable name="b" select="'500'" />
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为变量'a'的节点及其变量'b'的内容.我必须使用xsltproc和XSLT 1.0以及一些EXSLT扩展(其中包含节点集),所以我已经实现了它的一部分:

<xsl:template match="/">
  <xsl:variable name="x" >
    &lt;<xsl:value-of  select="$a" />&gt;
        <xsl:value-of  select="$b" />
    &lt;/<xsl:value-of  select="$a" />&gt;
  </xsl:variable>
  <xsl:value-of disable-output-escaping="yes" select="$x" />
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

确实推出了这个(我暂时不关心空白):

<?xml version="1.0"?>

    <Total>
        500
    </Total>
Run Code Online (Sandbox Code Playgroud)

但是:我想使用变量'x'作为节点集来进一步操作它(当然我的现实生活中的例子更复杂).我所做的是将其转换为节点集(使用exslt.org/common),这似乎有效但访问内容却没有.

  <xsl:variable name="nodes" select="common:node-set($x)" />
  <xsl:value-of select="$nodes/Total" />
Run Code Online (Sandbox Code Playgroud)

没有任何结果.因为$ nodes/Total应该是一个有效的XPATH 1.0表达式,我本来期望' 500 '.显然我错过了一些东西.我想重点是动态创建节点名称&lt;...&gt;并不真正创建一个节点而只是一些文本输出,那么我如何在这里实现真正的节点创建?

variables node-set xslt-1.0

3
推荐指数
1
解决办法
1万
查看次数

在icecast服务器的xslt实现中检测node-set()函数的可用性

的Icecast包含基于一个XSLT实现的libxsltxmlsoft

我想知道它是否支持node-set()函数,最好以一种也适用于其他纯网络环境的方式:

遗憾的是,icecast 中的XSLT 处理器只能通过icecast 进程的Web 界面进行Web 访问(因此命令行上没有xsltproc)。更糟糕的是:XSLT 错误的日志记录有限(当你做错事时,icecast 进程通常会死掉)。

我正在运行 icecast 2.3.2,因为它是基于 Windows最新版本(目前还没有用于 Windows 的 2.3.3 版本),其中 libxslt.dll 的日期是 2008 年。DLL 中没有版本号,我是最好的可以提供的是这个(见底部的 XSLT 代码):

Version:    1.0
Vendor:     libxslt
Vendor URL: http://xmlsoft.org/XSLT/
Run Code Online (Sandbox Code Playgroud)

我尝试运行David Carlisle 的博客文章“如何以独立于平台的方式使用节点集功能? ”指向的 EXSLT 节点集功能中提到的节点集检测。

从输出来看,我认为失败了:

icemaster@localhost972990localhost00EarthIcecast 2.3.2Sun, 23 Jun 2013 20:02:19 W. Europe Daylight Time202200ice-samplerate=44100;ice-bitrate=64;ice-channels=264StationGenre6424410000http://localhost:8000.....
Run Code Online (Sandbox Code Playgroud)

通过 Web 界面中的 XSL 文件进行查找的最佳方法是什么?

版本脚本:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="text" encoding="UTF-8" …
Run Code Online (Sandbox Code Playgroud)

xslt node-set

3
推荐指数
1
解决办法
1246
查看次数

如何在遍历节点集时引用源XML?

我有以下XSLT样式表(简化):

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="exsl">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:variable name="categories">
    <category name="one"/>
    <category name="two"/>
    <category name="three"/>
</xsl:variable>

<xsl:template match="/">
<result>

<xsl:for-each select="exsl:node-set($categories)/category">
<xsl:element name="{@name}">

<!-- THIS IS THE PROBLEMATIC PART -->
    <xsl:for-each select="/input/object">
        <item>
            <xsl:value-of select="."/>
        </item>
    </xsl:for-each>

</xsl:element>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这是指以下源XML文档(也简化):

<?xml version="1.0" encoding="utf-8"?>
<input>
    <object category="one">a</object>
    <object category="one">b</object>
    <object category="two">c</object>
    <object category="one">d</object>
    <object category="three">e</object>
</input>
Run Code Online (Sandbox Code Playgroud)

对源文档的引用不会产生任何结果; 输出只是空元素,每个类别一个:

<?xml version="1.0" encoding="UTF-8"?>
<result>
  <one/>
  <two/>
  <three/>
</result>
Run Code Online (Sandbox Code Playgroud)

如何使用源文档中的项目"填充"元素?


只是为了澄清,使用不同的方法已经解决了这背后的"真正"问题.我只是想了解为什么这种方法不起作用.

xml xslt xpath node-set

2
推荐指数
1
解决办法
530
查看次数