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

从顶部节点删除命名空间声明会使 XML 文档无效,因为使用了 xsi 前缀但未声明。当您尝试在查询中加载文档时,这应该会导致错误。

我假设 Name 和 Address 节点是直接从源文档复制的,而其他节点是构建的。

从源文档复制节点时,源节点的范围内命名空间与包含副本的节点中的范围内命名空间组合。这些组合的方式由复制命名空间模式指定。

在您的情况下,您希望命名空间从父节点(查询中的节点)继承,但您不希望在源文档中保留不必要的命名空间。

这可以通过在查询顶部添加以下行来实现:

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