gpt4 book ai didi

xpath - 我无法使用Xpath提取节点文本

转载 作者:行者123 更新时间:2023-12-03 16:08:45 24 4
gpt4 key购买 nike

我有一个像这样的XML文件(test.xml):

<?xml version="1.0" encoding="ISO-8859-1"?>
<s2xResponse>
<s2xData>
<Name>This is the name</Name>
<InfocomData>
<DateOfUpdate day="07" month="02" year="2018">20180207</DateOfUpdate>
<CompanyName>MY COMPANY</CompanyName>
<TaxCode FlagCheck="0">XXXYYYWWWZZZ</TaxCode>
</InfocomData>
<AssessmentSummary>
<Rating Code="2">Rating Description for Code 2</Rating>
</AssessmentSummary>
<AssessmentData>
<SectorialDistribution>
<CompaniesNumber>11650</CompaniesNumber>
<ScoreDistribution />
<CervedScoreDistribution>
<DistributionData>
<Rating Code="1">SICUREZZA</Rating>
<Percentage>1.91</Percentage>
</DistributionData>
<DistributionData>
<Rating Code="2">SOLVIBILITA' ELEVATA</Rating>
<Percentage>35.56</Percentage>
</DistributionData>
</CervedScoreDistribution>
</SectorialDistribution>
</AssessmentData>
</s2xData>
</s2xResponse>


我正在尝试使用XmlExtractor的U-SQL脚本获取“名称”节点文本(“这是名称”)。以下是我正在使用的代码:

USE TestXML; // It contains the registered assembly

REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

@xml = EXTRACT xml_text string
FROM "textxpath/test.xml"
USING Extractors.Text(rowDelimiter: "^", quoting: false);

@xml_cleaned =
SELECT
xml_text.Replace("\r\n", "").Replace("\t", " ") AS xml_text
FROM @xml;

@values =
SELECT Microsoft.Analytics.Samples.Formats.Xml.XPath.Evaluate(xml_text, "s2xResponse/s2xData/Name")[1] AS value
FROM @xml_cleaned;


OUTPUT @values TO @"outputs/test_xpath.txt" USING Outputters.Text(quoting: false);


但是我遇到了这个运行时错误:


执行失败,出现错误'1_SV1_Extract错误:
'{“ diagnosticCode”:195887116,“严重性”:“错误”,“组件”:“ RUNTIME”,“源”:“用户”,“ errorId”:“ E_RUNTIME_USER_EXPRESSIONEVALUATION”,“消息”:“错误
在评估表达时
Microsoft.Analytics.Samples.Formats.Xml.XPath.Evaluate(xml_text.Replace(\“ \ r \ n \”,
\“ \”)。替换(\“ \ t \”,\“ \”),
\“ s2xResponse / s2xData / Name \”)[1]“,” description“:”内部异常来自
用户表达:索引超出范围。必须为非负且小于
超过集合的大小。


即使将零索引用于评估结果([0]),我也会遇到相同的错误。

我的查询出了什么问题?

最佳答案

这里的问题是您将下标[1]应用于XPath.Evaluate的结果,我相信它将返回Name节点。但是,您是在代码中而不是在XPath中应用[1]下标,因此该下标很可能基于零,而不是像XPath中那样基于1,因此会出现Index out of range错误。

这是一种解决方案-只需在Xpath(仍基于1的位置)中应用下标运算符,然后在其中选择text()

 .Evaluate("s2xResponse/s2xData/Name[1]/text()")

关于xpath - 我无法使用Xpath提取节点文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com