首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSXMLDocument validateAndReturnError需要网络连接吗?

NSXMLDocument validateAndReturnError需要网络连接吗?
EN

Stack Overflow用户
提问于 2011-03-02 00:27:23
回答 1查看 1K关注 0票数 2

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

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

我使用网络连接的代码如下:

代码语言:javascript
复制
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标记:

代码语言:javascript
复制
<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

Domain=NSXMLParserErrorDomain Code=1 UserInfo=0x103051c10“元素'{http://www.w3.org/2001/XMLSchema}import':在位置'http://www.w3.org/2001/xml.xsd'‘处定位架构失败。正在跳过导入。属性使用(未知),属性'ref':ref值’{ QName‘未解析为(N)属性声明。属性使用(未知),属性'ref':ref值’{ QName‘未解析为(N)属性声明。”

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2011-03-02 19:09:59

查看NSXMLDTD类的苹果文档会发现,您确实有权访问目录。但是,对定义要使用的目录的支持似乎非常有限。可以在/etc/xml/catalog上创建目录,也可以设置XML_CATALOG_FILES环境变量。

一旦有了目录,就应该能够在目录中为W3模式放置一个条目以及一个本地副本。类似于:

代码语言:javascript
复制
<?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>

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5157286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档