以前就碰過,一直懶得研究 XDocument 到底為什麼有時候會秀逗,直接改用 XmlDocument。 這次碰到非用不可的情況,就藉機深究下。
- string xml = @"<?xml version='1.0' encoding='utf-8'?>
- <ComputerBuildReportRequest xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.ms.it.oem/digitaldistribution/2010/10'>
- <Bindings>
- <Binding>
- <ProductKeyID>1000000002</ProductKeyID>
- <HardwareHash>xxx</HardwareHash>
- <HXSpecifics>
- <UnitPartNumber>123456-789</UnitPartNumber>
- </HXSpecifics>
- </Binding>
- <Binding>
- <ProductKeyID>1000000003</ProductKeyID>
- <HardwareHash>yyy</HardwareHash>
- <HXSpecifics>
- <UnitPartNumber>123456-787</UnitPartNumber>
- </HXSpecifics>
- </Binding>
- </Bindings>
- </ComputerBuildReportRequest>";
- XDocument doc = XDocument.Parse(xml);
- var elements = doc.Descendants("Binding"); // empty
簡單說,有 namespace 的情況下查都要補 namespace 給它,非常智障。
而且這用法還不接受$串字的語法糖,是真的棒。
- string xml = @"<?xml version='1.0' encoding='utf-8'?>
- <ComputerBuildReportRequest xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.ms.it.oem/digitaldistribution/2010/10'>
- <Bindings>
- <Binding>
- <ProductKeyID>1000000002</ProductKeyID>
- <HardwareHash>xxx</HardwareHash>
- <HXSpecifics>
- <UnitPartNumber>123456-789</UnitPartNumber>
- </HXSpecifics>
- </Binding>
- <Binding>
- <ProductKeyID>1000000003</ProductKeyID>
- <HardwareHash>yyy</HardwareHash>
- <HXSpecifics>
- <UnitPartNumber>123456-787</UnitPartNumber>
- </HXSpecifics>
- </Binding>
- </Bindings>
- </ComputerBuildReportRequest>";
- XDocument doc = XDocument.Parse(xml);
- XNamespace df = doc.Root.Name.Namespace;
- var elements = doc.Descendants(df + "Binding");
沒有留言:
張貼留言