我有一个字符串值,如下所示。如何返回引号中包含的所有值。 答案之下是70116280,05 / 06/2014 16:31:38等......基本上答案就是引用列表中包含的所有内容。
字符串值
<!-- Capacitor Stack Signoff Record -->
<stack_signoff_result lead_traveler="70116280" date="05/06/2014 16:31:38"
employee_id="testuser" total_energy="77.266345" status="true"
operation_mode="Manual" result_detail="NA">
<signoff_data>
<adhesive part_number="1234" kanban_number="5678"/>
</signoff_data>
<capacitor_set>
<top_capacitor traveler="45911012" energy="26.000567" capacitance="0.000287553595"/>
<middle_capacitor traveler="45817588" energy="25.576334" capacitance="0.00028426705"/>
<bottom_capacitor traveler="45911141" energy="25.689444" capacitance="0.000284239714"/>
</capacitor_set>
</stack_signoff_result>
答案 0 :(得分:2)
我认为最简单的方法是使用XPath queires:
using System.Linq;
using System.Xml.Linq;
using System.Xml.XPath;
...
XDocument document = XDocument.Parse(stringValue);
var xpath = @"//stack_signoff_result[@lead_traveler='70116280']";
var result = from item in document.XPathSelectElements(xpath)
select item;
foreach (var item in result)
{
...
}
UPDATE:要获取所有引用的属性值,可以使用下面的LINQ oneliner(我已将其格式化以便于阅读,但您可以将代码展平为单行)。
var result = string.Join(
",",
XElement
// Parse xml or can reuse element found in code above
.Parse(string value)
// Search in element and all its descendants
.DescendantsAndSelf()
// Select all atributtes (quoted values)
.SelectMany(item => item.Attributes())
// Select attribute value
.Select(item => item.Value)
);
此解决方案不如字符串操作快,但更稳定。例如,如果在Enigmativity的代码中将是文本节点内的引号,那么您将得到错误的结果。
此外,您可以更轻松地与第一版中编写的搜索任务混合使用:
var result = XDocument
.Parse(stringValue)
.XPathSelectElements(@"//stack_signoff_result[@lead_traveler='70116280']")
.Select(item =>
string.Join(
",",
item.DescendantsAndSelf()
.SelectMany(element => element.Attributes())
.Select(element => element.Value)
)
)
;
答案 1 :(得分:1)
试试这个:
var result = String.Join("", text.Split('"').Where((x, n) => n % 2 == 1));
我明白了:
7011628005/06/2014 16:31:38testuser77.266345trueManualNA123456784591101226.0005670.0002875535954581758825.5763340.000284267054591114125.6894440.000284239714