gpt4 book ai didi

cocoa - NSXMLDocument validateAndReturnError 需要网络连接吗?

转载 作者:行者123 更新时间:2023-12-03 16:44:26 25 4
gpt4 key购买 nike

我正在尝试使用 NSXMLDocument 根据架构的架构 ( http://www.w3.org/2001/XMLSchema ) 验证 XML 架构文档。我已经让它正常工作,并假设我正在根据本地架构进行验证。

但是,我发现在没有网络连接的情况下,此验证不起作用。有没有办法强制 NSXMLDocument 使用本地模式进行验证?

我使用网络连接的代码:

xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:furl            options:(NSXMLDocumentValidate | NSXMLNodePreserveAll)
error:&err];
NSXMLElement *rootElement = [xmlDoc rootElement];
NSMutableArray *namespaces = [[rootElement namespaces] mutableCopy];
[namespaces addObject:[NSXMLNode namespaceWithName:@"xsi" stringValue:@"http://www.w3.org/2001/XMLSchema-instance"]];
[rootElement setNamespaces:namespaces];
[rootElement removeAttributeForName:@"xsi:schemaLocation"];
[rootElement addAttribute:[NSXMLNode attributeWithName:@"xsi:schemaLocation" stringValue:[NSString stringWithFormat:@"http://www.w3.org/2001/XMLSchema %@", @"/System/Library/Schemas/XMLSchema.xsd"]]];
BOOL vaildXML = [xmlDoc validateAndReturnError:&err];

我正在验证的文档的架构标记:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:myCompany="http://schema.myCompany.com/SomeSchema"
targetNamespace="http://schema.myCompany.com/SomeSchema">

w3.org 架构位置似乎有问题,但我公司的架构位置没有问题。

我看到的错误

错误:没有这样的文件或目录I/O 警告:无法加载外部实体“http://www.w3.org/2001/xml.xsd”

错误域=NSXMLParserErrorDomain代码=1 UserInfo=0x103051c10“元素'{http://www.w3.org/2001/XMLSchema}import':无法在位置'http://www.w3. org/2001/xml.xsd'。跳过导入。属性使用(未知),属性“ref”:QName 值“{http://www.w3.org/XML/1998/namespace}lang”未解析为 (n) 属性声明。属性使用(未知),属性“ref”:QName 值“{http://www.w3.org/XML/1998/namespace}lang”未解析为 (n) 属性声明。

有什么想法吗?

最佳答案

查看 Apple 文档中的 NSXMLDTD类表明您确实有权访问目录。然而,对定义要使用的目录的支持似乎非常有限。您可以在 /etc/xml/catalog 中创建目录或设置 XML_CATALOG_FILES 环境变量。

获得目录后,您应该能够在其中放置 W3 架构的条目以及本地副本。像这样的东西:

<?xml version="1.0"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="http://www.w3.org/2001/xml.xsd" uri="xml.xsd"/>
<uri name="http://www.w3.org/XML/1998/namespace" uri="xml.xsd"/>
</catalog>

这假设您的目录和架构位于同一目录中。

我自己无法尝试这个(缺乏时间和生锈的 cocoa 技能),但它应该有效。如果我没记错的话,NSXML 基于 libxml2,它当然支持目录。目录本身的规范可以在 OASIS website 上找到。 .

关于cocoa - NSXMLDocument validateAndReturnError 需要网络连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com