我的XML看起来像这样:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ocrsdk.com/schema/resultDescription-1.0.xsd http://ocrsdk.com/schema/resultDescription-1.0.xsd" xmlns="http://ocrsdk.com/schema/resultDescription-1.0.xsd">
<page index="0">
<text id="print" left="160" top="349" right="339" bottom="384">
**<value>Vertraqsnummer:</value>**
<line left="167" top="366" right="326" bottom="384">
<char left="167" top="366" right="180" bottom="382">V</char>
<char left="287" top="370" right="302" bottom="382">
<charRecVariants>
<variant charConfidence="22">m</variant>
<variant charConfidence="-1">rn</variant>
</charRecVariants>m</char>
<char left="304" top="370" right="314" bottom="382">e</char>
<char left="316" top="370" right="322" bottom="382">r</char>
<char left="324" top="370" right="326" bottom="382" suspicious="true">:</char>
</line>
</text>
<text id="handprint" left="387" top="1035" right="635" bottom="1089">
**<value>309.05</value>**
<line left="398" top="1045" right="633" bottom="1089">
<char left="398" top="1052" right="426" bottom="1088">3</char>
<char left="423" top="1061" right="455" bottom="1089" suspicious="true">0</char>
<char left="546" top="1045" right="633" bottom="1089" suspicious="true">5</char>
</line>
</text>
<checkmark id="checked" left="883" top="427" right="928" bottom="469">
**<value>checked</value>**
</checkmark>
<checkmark id="not checked" left="884" top="511" right="928" bottom="554">
**<value>unchecked</value>**
</checkmark>
<barcode id="leftBarcode" left="46" top="1048" right="128" bottom="1350">
<value encoding="Base64">QkYxMDExNQ==</value>
</barcode>
我希望只能解析写入XXX的字段,取内部值并将其放在我的c#类字段下。
例如,对于这个XML,我想采用这些值:
**<value>Vertraqsnummer:</value>**
**<value>309.05</value>**
**<value>checked</value>**
例如使用“A”类:
class A
{
public string s1;
public string s2;
public string s3;
}
我的结果应该是: s1 = Vertraqsnummer s2 = 309.05 s3 =已检查
我在这里看了一些问题,但我唯一注意到的是我可以使用XsdObjectGen或XSD.exe。问题在于它们采用整个XML而不仅仅是我需要的部分。
任何帮助都会非常受欢迎!
答案 0 :(得分:2)
XmlNamespaceManager nsMgr = new XmlNamespaceManager(new NameTable());
nsMgr.AddNamespace("ns", "http://ocrsdk.com/schema/resultDescription-1.0.xsd");
var result = XDocument.Load(filename)
.XPathSelectElements("//ns:text/ns:value|//ns:checkmark[@id='checked']/ns:value", nsMgr)
.Select(x => x.Value)
.ToList();
或没有XPATH
XNamespace ns = "http://ocrsdk.com/schema/resultDescription-1.0.xsd";
var xDoc = XDocument.Load(filename);
var result = xDoc.Descendants(ns + "text")
.Union(xDoc.Descendants(ns + "checkmark").Where(c => (string)c.Attribute("id") == "checked"))
.Select(x => x.Element(ns + "value").Value)
.ToList();