标签: xpath

XSLT需要/和元素的区别

我的XSLT中有两个场景:

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

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

这两者有什么区别?

xslt xpath

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

当XML再次包含相同的元素时,如何使用C#解析XML?

我正在尝试读取一个看起来像的XML文件,

<?xml version="1.0" encoding="UTF-8"?>
<MyXML>
<SESSION FORM_ID="775938" CID="" ID="HAKKI-LAPTOP_634975758376381105">
<FIELD NAME="A001DATE_M" Y="2.32" X="5.5" WIDTH="7.15" HEIGHT="0.99">First Value</FIELD>
<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99">Second Value</FIELD>
<FIELD NAME="A003" Y="1.11" X="17.83" WIDTH="2.38" HEIGHT="0.99">Third Value</FIELD>
<FIELD NAME="A004" Y="1.11" X="5.5" WIDTH="2.38" HEIGHT="0.99">Fourth Value</FIELD>
</SESSION> 
</MyXML>
Run Code Online (Sandbox Code Playgroud)

我试图读取读取的第三个值.我的代码可以检索第一个值.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(sXMLPath);
XmlNode node = xmlDoc.SelectSingleNode("MyXML/SESSION/FIELD");
if (node != null)
{
     MessageBox.Show(node.InnerText);
}
Run Code Online (Sandbox Code Playgroud)

为了读取第三个或第四个值,我需要做出哪些更改?

解决方案:(由@DGibbs提供)

XDocument xml = XDocument.Load(sXMLPath);
var elem = (from n in xml.Descendants("FIELD")
            where n.Attribute("NAME").Value == "A004"
            select n).FirstOrDefault();
MessageBox.Show(elem.Value);
Run Code Online (Sandbox Code Playgroud)

c# xml xpath xml-parsing

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

XSLT替换变量中的双引号

只是为了澄清,我正在使用XSLT 1.0.很抱歉没有首先指定.

我有一个XSLT样式表,我想将双引号替换为可安全进入JSON字符串的安全.我正在尝试做类似以下的事情:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" omit-xml-declaration="yes" />
  <xsl:strip-space elements="*" />

  <xsl:template match="/message">
    <xsl:variable name="body"><xsl:value-of select="body"/></xsl:variable>


    {
      "message" : 
      {
        "body":  "<xsl:value-of select="normalize-space($body)"/>"
      }
    }
  </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

如果我传入的XML看起来如下所示,这将始终正常工作:

<message>
 <body>This is a normal string that will not give you any issues</body>
</message>
Run Code Online (Sandbox Code Playgroud)

但是,我正在处理一个包含完整HTML的主体,这不是问题,因为它normalize-space()会处理HTML,而不是双引号.这打破了我:

<message>
<body>And so he quoted: "I will break him". The end.</body>
</message>
Run Code Online (Sandbox Code Playgroud)

我真的不在乎双引号是HTML转义还是带反斜杠的前缀.我只需要确保最终结果通过JSON解析器.

此输出传递JSON Lint并且是适当的解决方案(反斜杠引号):

{ "body" : "And so he quoted: \"I will break him\". The end." } 
Run Code Online (Sandbox Code Playgroud)

xml xslt xpath json

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

在SQL Server XPath中获取以下兄弟

由于SQL Server不支持follow-sibling轴 - 获取它的最佳方法是什么?假设我有这样的XML,我希望在节点匹配值'dog'后获得第一个'b'节点:

<root>
    <a>cat</a>
    <b>Cats don't like milk</b>
    <a>dog</a>
    <b>Dogs like everything</b>
</root>
Run Code Online (Sandbox Code Playgroud)

sql-server xpath

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

XPath表达式中的Perl变量

如何使用XML :: LibXML模块的findnodes()函数在XPath表达式中使用Perl变量?这就是我得到的:

my $variable = 1;
foreach my $node1 ($doc->findnodes('par/par1/par2[@id = $variable]'))
{

}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.谢谢.

xml perl xpath xml-libxml

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

Selenium Java Xpath复杂元素确定一个兄弟的孩子

我试图在页面上找到一个特定的元素,但无法弄清楚要使用的正确的Xpath.

这是HTML(请注意每个div的位置可能会有所不同):

    <div>
     <label>First Name</label>
     <span class="metadataField metadataFieldReadonly">
      <input type="text" name="some-random-value" value="John">
     </span>
    </div>
    <div>
     <label>Last Name</label>
     <span class="metadataField metadataFieldReadonly">
      <input type="text" name="some-random-value" value="Smith">
     </span>
    </div>
Run Code Online (Sandbox Code Playgroud)

所以我试图在具有// div/label [text()='Last Name'的同一div中找到// div/span [@ class ='metadataField metadataFieldReadonly'] /输入的INPUT元素]

我可以用这个成功找到标签(使用JAVA):

    driver.findElement(By.xpath("//div/label[text()='Last Name']")).click();
Run Code Online (Sandbox Code Playgroud)

我可以成功找到第一个元素下的第一个输入(但我可能并不总是想要第一个元素):

    driver.findElement(By.xpath("//div/span[@class='metadataField metadataFieldReadonly']/input")).click();
Run Code Online (Sandbox Code Playgroud)

所以问题是(i)INPUT的名称标签和值总是不同,所以它们不能用来挑选元素,而(ii)带有姓氏标签的div可能并不总是第二个,而且( iii)标签和跨度是相同级别(兄弟姐妹)所以我无法弄清楚如何正确创建Xpath语句.

所以在单词中,我需要在同一个div中找到span的输入,其中包含一个带有"Last Name"的标签.

所以我需要知道如何将这两个XPath语句组合成一个复杂的语句(假设它们在同一个div中,并且标签和span是兄弟姐妹):

    //div/label[text()='Last Name']
    //div/span[@class='metadataField metadataFieldReadonly']/input
Run Code Online (Sandbox Code Playgroud)

谢谢

java selenium xpath selenium-webdriver

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

使用XSLT删除空/不需要的节点

我有一个XML文件,其中包含大量不需要/不需要的数据,我想使用XSLT进行清理

这是一小段数据,带有示例空节点

<?xml version="1.0" encoding="utf-8"?>
<Report xsi:schemaLocation="xxx">
    <Tablix3>
        <Tablix13 Textbox1164="TAX SUMMARY" Textbox10="">
            <table26 textbox155="code">
                <Detail_Collection>
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" …
Run Code Online (Sandbox Code Playgroud)

xml xslt xpath

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

Selenium WebDriver在选择xpath时抛出错误

driver.findElement(By.xpath("//input[@type="+"checkbox"+"]/following-sibling:://td[contains(text(),"+"template"+"]"))
Run Code Online (Sandbox Code Playgroud)

我的HTML就像这样

<tr>
<td class="tablecontent">
<input type="checkbox" value="59781" name="templateIds">
</td>`enter code here`
<td class="tablecontent"> test11 </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

org.openqa.selenium.InvalidSelectorException:给定的选择器//输入[@type = checkbox]/following-sibling :: // td [contains(text(),template]无效或不会产生WebElement.发生以下错误:InvalidSelectorError:由于以下错误,无法找到具有xpath表达式的元素//输入[@type = checkbox]/following-sibling :: // td [contains(text(),template]:[Exception] ..."表达式不是合法表达式."代码:"12"nsresult:"0x805b0033(SyntaxError)"location:"file:/// C:/ Users/sanjdash/AppData/Local/Temp/anonymous3529970525380845680webdriver-profile /extensions/fxdriver@googlecode.com/components/driver_component.js行:5956"]命令持续时间或超时:72毫秒有关此错误的文档,请访问: http://seleniumhq.org/exceptions/invalid_selector_exception.html构建信息:版本:'2.37.0',修订版:'a7c61cbd68657e133ae96672cf995890bad2ee42',时间:'2013-10-18 09:51:02'

java selenium xpath selenium-webdriver

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

删除标记但保留文本

所以我<a>在xml文件中有这个标签

<a href="/www.somethinggggg.com">Something 123</a>
Run Code Online (Sandbox Code Playgroud)

我想要的结果是使用Nokogiri并完全删除它的标签,因此它不再是可点击的链接,例如

Something 123
Run Code Online (Sandbox Code Playgroud)

我的尝试:

content = Nokogiri::XML.fragment(page_content)
content.search('.//a').remove
Run Code Online (Sandbox Code Playgroud)

但这也删除了文本.

有关如何使用Nokogiri实现我想要的结果的任何建议?

ruby xml xpath nokogiri

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

Scrapy无法找到XPath内容

我正在用Scrapy编写一个网络爬虫来下载某个网页上的回复文本.

以下是网页背后代码的相关部分,用于特定的对讲:

<div id="site_comment_71339" class="site_comment site_comment-even large high-rank">
    <div class="talkback-topic">
        <a class="show-comment" data-ajax-url="/comments/71339.js?counter=97&num=57" href="/comments/71339?counter=97&num=57">57. talk back title here </a>
</div>
    <div class="talkback-message"> blah blah blah talk-back message here </div>
....etc etc etc ......
Run Code Online (Sandbox Code Playgroud)

在编写XPath以获取消息时:

titles = hxs.xpath("//div[@class='site_comment site_comment-even large high-rank']")
Run Code Online (Sandbox Code Playgroud)

后来:

item["title"] = titles.xpath("div[@class='talkback-message']text()").extract()
Run Code Online (Sandbox Code Playgroud)

没有错误,但它不起作用.有什么想法吗?我想我没有正确编写路径,但我找不到错误.

谢谢 :)

整个代码:

from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from craigslist_sample.items import CraigslistSampleItem

class MySpider(BaseSpider):
    name = "craig"
    allowed_domains = ["tbk.co.il"]
    start_urls = ["http://www.tbk.co.il/tag/%D7%91%D7%A0%D7%99%D7%9E%D7%99%D7%9F_%D7%A0%D7%AA%D7%A0%D7%99%D7%94%D7%95/talkbacks"]

    def parse(self, response):
        hxs = Selector(response)
        titles = hxs.xpath("//div[@class='site_comment …
Run Code Online (Sandbox Code Playgroud)

xpath web-crawler scrapy web-scraping

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