1

取得した XQuery 出力の例を次に示します。

<clinic>
    <Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Healthy Kids Pediatrics</Name>
    <Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">510 W 27th St, Los Angeles, CA 90007</Address>
    <PhoneNumberList>213-555-5845</PhoneNumberList>
    <NumberOfPatientGroups>2</NumberOfPatientGroups>
</clinic>

ご覧のとおり、<Name>and<Address>タグには、これらの奇妙な xmlns:xsi タグが追加されています。

おもしろいのは、xml ファイルの先頭に移動して、次のものを削除することです。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="vaccination.xsl"?>
<Vaccination xsi:noNamespaceSchemaLocation="vaccination.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

表現

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

次に、私の XQuery XML 出力は次のようになります (これが必要です)。

<clinic>
    <Name>Healthy Kids Pediatrics</Name>
    <Address>510 W 27th St, Los Angeles, CA 90007</Address>
    <PhoneNumberList>213-555-5845</PhoneNumberList>
    <NumberOfPatientGroups>2</NumberOfPatientGroups>
</clinic>

しかし、ブラウザで XML を表示すると、エラーが発生し、次のように表示されます。

XML Parsing Error: prefix not bound to a namespace
Location: file:///C:/Users/Pac/Desktop/csci585-hw3/vaccination.xml
Line Number 3, Column 1:<Vaccination xsi:noNamespaceSchemaLocation="vaccination.xsd">
^

XML/XSL を壊さずに XQuery 出力からこれらの xsi タグを削除する方法を知っている人はいますか?

4

1 に答える 1

3

最上位ノードから名前空間宣言を削除すると、xsi プレフィックスが使用されているが宣言されていないため、XML ドキュメントが無効になります。これにより、クエリでドキュメントを読み込もうとするとエラーが発生するはずでした。

Name ノードと Address ノードはソース ドキュメントから直接コピーされ、その他のノードは構築されていると仮定します。

ソース ドキュメントからノードをコピーすると、ソース ノードの範囲内の名前空間が、コピーを含むノードの範囲内の名前空間と結合されます。これらを組み合わせる方法は、copy-namespaces-mode で指定します。

あなたの場合、名前空間を親ノード (クエリのノード) から継承したいが、不要なソース ドキュメントで名前空間を保持したくない。

これは、クエリの先頭に次の行を追加することで実現できます。

declare copy-namespaces no-preserve, inherit;
于 2009-11-23T12:07:14.920 に答える