相关疑难解决方法(0)

XSLT:选择follow-sibling直到达到指定的标记

我正在尝试编写XSLT,它将在选定的后续兄弟节点上运行for-each,但在到达另一个标签(h1)时停止.

这是源XML:

<?xml version="1.0"?>
<html>
    <h1>Test</h1>
    <p>Test: p 1</p>
    <p>Test: p 2</p>
    <h1>Test 2</h1>
    <p>Test2: p 1</p>
    <p>Test2: p 2</p>
    <p>Test2: p 3</p>
</html>
Run Code Online (Sandbox Code Playgroud)

这是XSLT:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <content>
            <xsl:apply-templates/>
        </content>
    </xsl:template>

    <xsl:template match="h1">
        <section>
            <sectionHeading>
                <xsl:apply-templates/>
            </sectionHeading>
            <sectionContent>
                <xsl:for-each select="following-sibling::p">
                    <paragraph>
                        <xsl:value-of select="."/>
                    </paragraph>
                </xsl:for-each>
            </sectionContent>
        </section>
    </xsl:template>

    <xsl:template match="p"/>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这是当前的结果:

<?xml version="1.0" encoding="UTF-8"?>
<content>
    <section>
        <sectionHeading>Test</sectionHeading>
        <sectionContent>
            <paragraph>Test: p 1</paragraph>
            <paragraph>Test: p 2</paragraph>
            <paragraph>Test: p 3</paragraph>
            <paragraph>Test2: p 1</paragraph>
            <paragraph>Test2: …
Run Code Online (Sandbox Code Playgroud)

xml xslt

18
推荐指数
2
解决办法
2万
查看次数

XPath:如何选择以下兄弟姐妹直到某个兄弟姐妹

对于下面的示例HTML,返回带有class ='B'的class ='A'的"a"元素的兄弟的XPath查询可以写成://a[@class='A']/following-sibling::a[@class='B'].此查询输出4个<a class="B"/>元素.

但是,我只想要<a class="B"/>跟随当前<a class="A"/>元素的元素,而不想跟随其他<a class="B"/>元素/节点的元素.换句话说,我只想要下面的<a class="B"/>兄弟元素,直到下一个<a class="B"/>元素出现.

示例HTML:

<a class='A' />
<a class='B' />
<a class='A' />
<a class='B' />
<a class='B' />
<a class='B' />
Run Code Online (Sandbox Code Playgroud)

关于如何将我当前的XPath查询限制为仅仅是那些兄弟姐妹的任何想法将非常感谢:)

html xpath

13
推荐指数
2
解决办法
9390
查看次数

XPath:选择以下兄弟姐妹直到某个班级

我有以下html代码段:

<table>
    <tr>
        <td class="foo">a</td>
            <td class="bar">1</td>
            <td class="bar">2</td>
        <td class="foo">b</td>
            <td class="bar">3</td>
            <td class="bar">4</td>
            <td class="bar">5</td>
        <td class="foo">c</td>
            <td class="bar">6</td>
            <td class="bar">7</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个XPath 1.0表达式,它从一个.foo元素开始,并.bar在下一个元素之前选择所有后续.foo元素.
例如:我开始a并且只想选择12.
或者我开始b并想要选择3,45.

背景:我必须为此方法找到一个XPath表达式(使用Java和Selenium):

public List<WebElement> bar(WebElement foo) {
    return foo.findElements(By.xpath("./following-sibling::td[@class='bar']..."));
}
Run Code Online (Sandbox Code Playgroud)

有办法解决问题吗?
表达式应该适用于所有.foo元素,而不使用任何外部变量.

谢谢你的帮助!

更新:这些特殊情况显然没有解决方案.但是如果您的限制较少,则提供的表达式可以完美地运行.

xpath

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

如何在XPath中连接节点的所有子节点的内容?

是否可以使用XPath获取节点的所有子节点的连接视图?我正在寻找类似JQuery .html()方法的东西.

例如,如果我有以下XML:

<h3 class="title">
    <span class="content">this</span>
    <span class="content"> is</span>
    <span class="content"> some</span>
    <span class="content"> text</span>
</h3>
Run Code Online (Sandbox Code Playgroud)

我想对"h3 [@ class ='title']"进行XPath查询,这会给我"这是一些文字".

这是真正的问题,但如果更多的上下文/背景是有用的,这里是:我使用XPath,我使用这篇文章来帮助我编写一些复杂的XSL.我的源XML看起来像这样.

<h3 class="title">Title</h3>
<p>
    <span class="content">Some</span>
    <span class="content"> text</span>
    <span class="content"> for</span>
    <span class="content"> this</span>
    <span class="content"> section</span>
</p>
<p>
    <span class="content">Another</span>
    <span class="content"> paragraph</span>
</p>
<h3 class="title">
    <span class="content">Title</span>
    <span class="content"> 2</span>
    <span class="content"> is</span>
    <span class="content"> complex</span>
</h3>
<p>
    <span class="content">Here</span>
    <span class="content"> is</span>
    <span class="content"> some</span>
    <span class="content"> text</span>
</p>
Run Code Online (Sandbox Code Playgroud)

我的输出XML会考虑每个标记<h3>以及所有<p> …

xpath

4
推荐指数
1
解决办法
7768
查看次数

XPath查找所有后续兄弟姐妹,直到特定类型的下一个兄弟

鉴于此XML/HTML:

<dl>
  <dt>Label1</dt><dd>Value1</dd>
  <dt>Label2</dt><dd>Value2</dd>
  <dt>Label3</dt><dd>Value3a</dd><dd>Value3b</dd>
  <dt>Label4</dt><dd>Value4</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

我想找到所有<dt>,然后,每个,找到以下<dd>直到下一个<dt>.

使用Ruby的Nokogiri我能够像这样完成:

dl.xpath('dt').each do |dt|
  ct  = dt.xpath('count(following-sibling::dt)')
  dds = dt.xpath("following-sibling::dd[count(following-sibling::dt)=#{ct}]")
  puts "#{dt.text}: #{dds.map(&:text).join(', ')}"
end
#=> Label1: Value1
#=> Label2: Value2
#=> Label3: Value3a, Value3b
#=> Label4: Value4
Run Code Online (Sandbox Code Playgroud)

但是,正如您所看到的,我在Ruby中创建一个变量,然后使用它编写一个XPath.我怎样才能编写一个相同的XPath表达式?

我猜到:

following-sibling::dd[count(following-sibling::dt)=count(self/following-sibling::dt)]
Run Code Online (Sandbox Code Playgroud)

但显然我不明白那self是什么意思.

这个问题与XPath类似:选择所有以下兄弟,直到另一个兄弟,除了'stop'节点没有唯一标识符.

这个问题与xpath几乎相同,除了我要求的XPath专用解决方案之外,找到所有以下兄弟相邻节点直到另一个类型.

ruby xml xpath nokogiri

4
推荐指数
1
解决办法
4279
查看次数

如何使用组相邻(XSLT)重新格式化XML

我是这个XSLT的新手,我无法弄清楚如何:

这是xml的片段,我从以下开始:

<Article>    
<Bullettext>10,00 </Bullettext>  
<Bullettext>8,00 </Bullettext>    
</Article>  
<Article>  
<something>some text</something>  
</Article>  
<Article>  
<Corpsdetexte>Bulgaria</Corpsdetexte>  
<Bullettext>15,0 </Bullettext>  
<Bullettext>10,0 </Bullettext>  
</Article> ` 
Run Code Online (Sandbox Code Playgroud)

这就是我想要的输出:

<LIST>  
<ITEM>12,00 </ITEM>  
<ITEM>10,00 </ITEM>  
<ITEM>8,00 </ITEM>  
</LIST>  
<P>  
<something>some text</something>  
</P>  

<P>  
<Corpsdetexte>Bulgaria</Corpsdetexte>  
</P>  
<LIST>  
<ITEM>15,0 </ITEM>  
<ITEM>10,0 </ITEM>  
</LIST>  
Run Code Online (Sandbox Code Playgroud)

有任何想法吗??

xml xslt transformation

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

标签 统计

xpath ×4

xml ×3

xslt ×2

html ×1

nokogiri ×1

ruby ×1

transformation ×1