1

インライン XSD を含む XML ドキュメントがあります (以下に完全に示します)。問題は、XSD から割り当てられた属性を使用して XML コンテンツを検索する必要があることです。できれば LINQ で (XPATH も機能します)。

CATALOG_NAMEしたがって、以下の例では、XSD からsql:field属性値CATALOG_NAMEを推測し、それを XML ドキュメント内の実際の要素名と照合して、要素を見つけたいと考えていますCATALOG_NAMEC00。要素を取得したら、その値が必要です。

XSD 検証の例と、XSD 自体のクエリの例を数多く見てきました。最後に、手動の検索ハックなしで「マージ」機能を探しています。

これは可能ですか?

<return xmlns="urn:schemas-microsoft-com:xml-analysis">
  <root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msxmla="http://schemas.microsoft.com/analysisservices/2003/xmla">
    <xsd:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
      <xsd:element name="root">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="row" type="row" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:simpleType name="uuid">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}" />
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="xmlDocument">
        <xsd:sequence>
          <xsd:any />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="row">
        <xsd:sequence>
          <xsd:element sql:field="CATALOG_NAME" name="CATALOG_NAMEC00" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="SCHEMA_NAME" name="SCHEMA_NAMEC01" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="CUBE_NAME" name="CUBE_NAMEC02" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="DIMENSION_UNIQUE_NAME" name="DIMENSION_UNIQUE_NAMEC03" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="HIERARCHY_UNIQUE_NAME" name="HIERARCHY_UNIQUE_NAMEC04" type="xsd:string" minOccurs="0" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
    <row>
      <CATALOG_NAMEC00>AGS PLANUNG_PA</CATALOG_NAMEC00>
      <CUBE_NAMEC02>Aktionsplan</CUBE_NAMEC02>
      <DIMENSION_UNIQUE_NAMEC03>[Planstand]</DIMENSION_UNIQUE_NAMEC03>
      <HIERARCHY_UNIQUE_NAMEC04>[Planstand].[Planstand]</HIERARCHY_UNIQUE_NAMEC04>
    </row>
  </root>
</return>
4

1 に答える 1

0

このXPathを試すことができます:

//*[local-name()=//*:element[@*:field='CATALOG_NAME']/@name]

これは XPath 2.0 であるため*、名前空間プレフィックスとして使用しましたが、名前空間を宣言して、任意のプレフィックスを使用できます。

于 2013-02-10T22:29:28.127 に答える