- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(tl;博士:请参阅底部的摘要。)
我正在实现一个从单个站点的 RSS 提要中提取内容的应用程序。以下是 XML 示例:
<item>
<title>Title</title>
<link>http://example.com</link>
<comments>http://example.com/#comments</comments>
<pubDate>Thu, 26 Jan 2012 03:05:11 +0000</pubDate>
<dc:creator>Billy D. Author</dc:creator>
<category><![CDATA[sample_category]]></category>
<guid isPermaLink="false">http://example.com</guid>
<description><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ac erat nec odio cursus accumsan. Nam feugiat hendrerit neque, nec tristique nisl ullamcorper vel. Nullam pellentesque augue metus. Vestibulum in lectus orci, eget ornare felis.…]]></description>
<content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ac erat nec odio cursus accumsan. Nam feugiat hendrerit neque, nec tristique nisl ullamcorper vel. Nullam pellentesque augue metus. Vestibulum in lectus orci, eget ornare felis. Vestibulum nisl lacus, faucibus ac aliquet eu, pellentesque rutrum justo. Nulla fringilla venenatis augue a laoreet. Maecenas metus leo, euismod eget rutrum in, mattis eget nisi. Proin at massa sit amet odio tempor venenatis sit amet sit amet erat. Mauris vitae bibendum arcu. Curabitur a purus vitae ipsum ultricies luctus vel et velit.</p><p>Donec in lacus sit amet mi sagittis auctor eget nec nunc. Pellentesque adipiscing venenatis risus, a faucibus sem pretium quis. Nam fringilla metus eu nulla pellentesque semper. Quisque in lectus nisi. Fusce pretium accumsan purus nec sodales. Donec velit nisi, ullamcorper at faucibus vitae, lacinia quis dui. Duis eu dui leo, eget varius diam. Aliquam imperdiet volutpat tellus quis venenatis. Vivamus laoreet malesuada tincidunt. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris ut purus est. Sed quis mauris ut dolor dapibus vestibulum ut eu dolor. Cras interdum sagittis faucibus. Nulla tortor ligula, molestie at sollicitudin at, hendrerit et lacus. Nunc lorem enim, aliquet id porttitor ultrices, sodales ac sapien.</p>]]></content:encoded>
<wfw:commentRss>http://example.com/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<enclosure url="http://example.com/some/other/stuff/>
</item>
我对以下元素感兴趣:标题、链接、pubDate、dc:creator、描述、内容:编码。
正如您可能猜到的那样,标题、链接、pubDate 和描述都很好。但是我得到的不是 dc:creator 的任何内容,而是 pubDate 的内容,并且我得到的是描述,而不是 content:encoded。
对于我的解析器对象,我有
[xmlParser setDelegate:self];
[xmlParser setShouldProcessNamespaces: YES];
[xmlParser setShouldReportNamespacePrefixes:YES];
[xmlParser setShouldResolveExternalEntities:YES];
并实现了以下方法:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
// NSLog(@"element %@, ns %@, qn %@", elementName, namespaceURI, qName);
if ( [elementName isEqualToString:@"rss"] ) {
return;
}
if ( [elementName isEqualToString:@"channel"] ) {
// begin the set of entries
if (!allEntries)
allEntries = [NSMutableArray array];
return;
}
if ( [elementName isEqualToString:@"item"] ) {
// item means a new post!
// currentPost = [[DIDSEntry alloc] init];
return;
}
if ( [elementName isEqualToString:@"title"]) {
[self setCurrentProperty:@"title"];
currentPostTitle = [NSString string];
return;
}
if ( [elementName isEqualToString:@"link"] ) {
[self setCurrentProperty:@"url"];
currentPostUrl = [[NSURL alloc] init];
return;
}
if ( [elementName isEqualToString:@"pubDate"] ) {
[self setCurrentProperty:@"date"];
currentPostDate = [[NSDate alloc] init];
return;
}
if ( [elementName isEqualToString:@"dc:creator"] ) {
[self setCurrentProperty:@"author"];
currentPostAuthor = [NSString string];
return;
}
if ( [elementName isEqualToString:@"description"] ) {
[self setCurrentProperty:@"preview"];
currentPostPreview = [NSString string];
return;
}
if ( [elementName isEqualToString:@"content:encoded"] ) {
[self setCurrentProperty:@"text"];
currentPostText = [NSString string];
return;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentStringValue) {
// currentStringValue is an NSMutableString instance variable
currentStringValue = [[NSMutableString alloc] initWithCapacity:50];
}
[currentStringValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ( [elementName isEqualToString:@"rss"] ) {
return;
}
if ( [elementName isEqualToString:@"channel"]) return;
if ( [elementName isEqualToString:@"item"] ) {
currentPost = [[DIDSEntry alloc] initWithPostTitle:currentPostTitle postAuthor:currentPostAuthor postUrl:currentPostUrl pubDate:currentPostDate postPreview:currentPostPreview postText:currentPostPreview];
[allEntries addObject:currentPost];
return;
}
NSString *prop = [self currentProperty];
if ( [prop isEqualToString:@"title"] ) {
[self setCurrentPostTitle:currentStringValue];
// return;
}
if ( [prop isEqualToString:@"url"] ) {
[self setCurrentPostUrl:[NSURL URLWithString:currentStringValue]];
// return;
}
if ( [prop isEqualToString:@"date"] ) {
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss ZZZ"];
[self setCurrentPostDate:[formatter dateFromString:currentStringValue]];
// NSLog(@"date: %@", currentStringValue);
}
if ( [prop isEqualToString:@"author"] ) {
[self setCurrentPostAuthor:currentStringValue];
// return;
}
if ( [prop isEqualToString:@"preview"] ) {
[self setCurrentPostPreview:currentStringValue];
// return;
}
if ( [prop isEqualToString:@"text"] ) {
[self setCurrentPostText:currentStringValue];
// return;
}
// currentStringValue is an instance variable
currentStringValue = nil;
return;
}
我也实现了
- (void)parser:(NSXMLParser *)parser didStartMappingPrefix:(NSString *)prefix toURI:(NSString *)namespaceURI
和
- (void)parser:(NSXMLParser *)parser didEndMappingPrefix:(NSString *)prefix
但只是为了记录他们被调用(他们被调用),因为我什至不知道我应该对他们做什么。
我一直在网络上试图找到我的代码为什么会这样以及如何修复它的答案,但我完全不知所措。我尝试测试限定名称而不是元素名称、删除前缀以及其他一些事情,但没有什么乐趣。 (我也只是肤浅地了解 XML 命名空间,尽管我所看到的一切都没有真正解决我所追求的问题。)
总结:
尝试使用命名空间解析元素并将其内容存储在实例变量中会导致先前解析的元素存储在这些 ivars 中。我不知道为什么会出现这种情况以及如何解决。
最佳答案
已解决。请原谅我,但显然这篇文章与命名空间无关。当我检查元素名称时,我确实将命名空间前缀从元素名称中去掉,每次使用后将 currentProperty 字符串设置为 nil,并注意到我将 postText 设置为 currentPostPreview。对不起。已经晚了。
关于xml - NSXMLParser 跳过具有 namespace 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014868/
大家好:我正在尝试创建一个命名空间,以便我可以在整个应用程序中的不同 CoffeeScript 文件中使用一个类(至少这是我对命名空间用途的理解) 我在这里找到了一个很好的例子:Classes wit
我想使用两个字符串(我不知道它们的内容)来创建两个 namespace 。如果 namespace 存在,我不想创建一个新的 namespace 。这是我的代码: function createNam
在 Struts 2 中,我看到根命名空间提供与根命名空间相同的行为,即充当“包罗万象”。我需要限制我的应用程序中的操作只能从一个 URL 访问,包括 URL 中没有 namespace 的操作。我的
我想在旧的代码库中包含新的 SASS。考虑到已经编写的新样式,我如何避免新样式泄漏。 例如 .box width: 100% // ... .tab display: inline-blo
我的\命名空间 \My\Namespace 那么,我应该使用哪一个,我看到了 php documentation主要使用 My\Namespace。 但据说 \My\Namespace 更好,因为没有
我正在研究 Rails 2.3.8。我的 environment.rb 中有以下内容 config.gem "redis" config.gem "redis-namespace", :lib =>
我有一个包含一些类型定义的小命名空间,我用它来使我的代码看起来更简洁。但是,我不想在每个使用这些类型之一的文件中添加“using namespace ...”行,毕竟我已经必须为文件添加 #inclu
如何获取 MediaWiki namespace 列表?最好有姓名和号码。 最佳答案 使用API:api.php?action=query&meta=siteinfo&siprop=namespa
为了使用“namespace import *”命令在不同的命名空间中使用该命名空间的变量/过程,“命名空间导出...”是否是必需的。我们真的应该在源命名空间中进行“导出”并在目标命名空间中进行“导入
假设我有以下 list ,例如部署,服务和入口。在默认 namespace 中,一切正常。虽然我想将资源投入到用manifest.yaml创建的另一个命名空间。我以为如果我写了 kubectl app
我想以编程方式将一个类从一个命名空间移动到另一个命名空间。这包括调整移动类在其先前命名空间中的任何依赖项。 我猜我可以以某种方式利用 Roslyn 项目,但我找不到起点。 编辑: 我正在尝试在 C#
Spring不同类型的注入方式 spring官网代码示例 1、不同类型的注入方式 <?xml version="1.0" encoding="UTF-8&qu
我想知道,考虑到这段代码: namespace A\B; use A\B as AB; use \Z\V as ZV; // another used namespace class Merry {
我正在研究一个似乎一切都很好的“董事会”类(class)。不知何故,在其他类(class)上工作了大约一个小时后,Board 在错误方面表现出一些非常奇怪的行为。 //headerfile #prag
我尝试在 TYPO3 扩展中创建多个 ViewHelper。 但是现在我尝试将 ViewHelper 放在子目录中,例如 扩展\类\ View 助手\自定义。 ViewHelper 的新
我的情况是:日历属于客户或销售员 因为我还有像 Event 和 File 这样的类,所以我将命名空间 App\Models 用于我所有的模型类。 所以我设置了多态关系: 在日历.php public
所有 Less 文档和教程都使用 #namespace > .mixin()当它进入命名空间时的语法。但是我发现自己更习惯于 .namespace.mixin()语法,即: .namespace()
我正在尝试使用 MS Robotics Studio 和 VS 2008 构建 DSS 服务,但是在构建时,我收到来自 dssproxy.exe 的错误消息: The class MyServ
例如,我们有两个用于解析简历的类,一个用于解析Excel,另一个用于解析HTML。我的同事们喜欢做的就是将这两个类命名为相同的名称,并将它们放在不同的命名空间中,如下所示: namespace XX.
我的库的所有类都在一个命名空间中定义。当我为 Doxygen 创建主页时,我必须在注释中明确使用这个命名空间来让 Doxygen 生成链接。我想对整个注释块使用“使用命名空间”之类的东西。 一个例子:
我是一名优秀的程序员,十分优秀!