2

ここに単純な XML スキーマがあります。

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="item">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="item" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="is-foo" type="xs:boolean" default="true" use="optional" />
            <xs:attribute name="is-bar" type="xs:boolean" default="false" use="optional" />
        </xs:complexType>
    </xs:element>
</xs:schema>

オプション/ブール属性を持つ再帰<item>ノードのみで、デフォルトはそれぞれとです。is-foois-bartruefalse

では、これらのデフォルト値は、PHP で XML データを読み取るコンテキストでどのように役立つのでしょうか? 有効な XML ドキュメントがある場合:

<item is-foo="false" is-bar="false">
    <item is-bar="true">
        <item>
            <item is-foo="true">
                <item />
                <item is-foo="true" />
            </item>
        </item>
        <item is-foo="true" is-bar="true" />
    </item>
</item>

私が実行する対象:

$document = new DOMDocument();
$document->load('./test.xml');
var_dump($document->schemaValidate('./test.xsd'));

$xpath = new DOMXPath($document);
foreach ($xpath->query('//item') as $item) {
    echo $item->getNodePath() . PHP_EOL
        . '  is-foo : ' . $item->getAttribute('is-foo') . PHP_EOL
        . '  is-bar : ' . $item->getAttribute('is-bar') . PHP_EOL;
}

次の出力が得られます (これは予想どおりですが、残念です)。

bool(true)
/item
  is-foo : false
  is-bar : false
/item/item
  is-foo :
  is-bar : true
/item/item/item[1]
  is-foo :
  is-bar :
/item/item/item[1]/item
  is-foo : true
  is-bar :
/item/item/item[1]/item/item[1]
  is-foo :
  is-bar :
/item/item/item[1]/item/item[2]
  is-foo : true
  is-bar :
/item/item/item[2]
  is-foo : true
  is-bar : true

ここでの問題は、すべて空の属性値です。

デフォルト値をプログラムでドキュメントに挿入する (再利用のためにスキーマを解釈する必要がある) 以外に、対応するスキーマで定義されているデフォルト値を含むように XML ドキュメントを変換するオプションはありますか?

4

1 に答える 1