标签: libxml2

如何从libxml2中的节点获取属性

我正在使用解析器从XML文件中获取数据.我使用libxml2来提取数据.我无法从节点获取属性.我只发现nb_attributes得到了属性的计数.

c libxml2

6
推荐指数
4
解决办法
2万
查看次数

我的Perl脚本中的findnodes语句出了什么问题?

我有一个简单的xml文件,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<microplateDoc xmlns="http://moleculardevices.com/microplateML">
<camelids>
  <species name="Camelus bactrianus">
    <common-name>Bactrian Camel</common-name>
    <physical-characteristics>
      <mass>450 to 500 kg.</mass>
      <appearance>
  Blah blah blah
   </appearance>
    </physical-characteristics>   
  </species>
  </camelids>
 </microplateDoc>   
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下perl脚本读取物种名称:

use XML::LibXML;

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file('/Users/johncumbers/Documents/7_Scripts/Perl/XML_to_MySQL/simplified_camelids.xml');
my $xc = XML::LibXML::XPathContext->new( $doc->documentElement()  );
$xc->registerNs('ns', 'http://moleculardevices.com/microplateML');

#loop through to find species nodes
my @n = $xc->findnodes('*/species');  #was */species
foreach $nod (@n) {
    print "A: ".$nod->getAttribute("name")."\n";
    my @c = $nod->findnodes('./common-name');
    }
Run Code Online (Sandbox Code Playgroud)

但我没有找到任何节点.你能帮忙告诉我为什么它不起作用吗?什么是查找perl函数的最佳网站,以便我可以尝试自己解决这个问题?如何让脚本告诉我它正在做什么,因为此刻的输出只是一无所获.非常感谢.

perl xpath libxml2

6
推荐指数
1
解决办法
3227
查看次数

libxml2 HTML解析

我正在使用libxml2解析HTML,使用XPath来查找元素.一旦我找到了我正在寻找的元素,我如何从该元素中获取HTML作为字符串(请记住,此元素将包含许多子元素).给出一份文件:

<html>
    <header>
        <title>Some document</title>
    </header

    <body>
        <p id="faq">
            Some kind of text <a href="http://www.nowhere.com/">here</a>.
        </p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

假设我body使用XPath 检索了元素,然后为此获取HTML,我想最终得到一个包含以下内容的字符串:

<body>
    <p id="faq">
        Some kind of text <a href="http://www.nowhere.com/">here</a>.
    </p>
</body>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

html c html-parsing libxml2

6
推荐指数
1
解决办法
4477
查看次数

使用LibXML验证XML

目前,我使用XML :: LibXML perl模块根据定义的XML模式验证XML文件.目前,如果我的XML文件无法针对定义的XML Schema成功验证,我将得到一个错误列表通知我,例如某些元素不是预期的,然后是预期的.在我的XML文件中,我将有许多相同名称的元素,但它们可能嵌套在XML文件的不同位置.

我的问题是,无论如何,我可以在尝试执行验证时输出可能出错的任何元素的XPath位置吗?

目前,我的XML文件非常庞大,并且在验证失败时很难"调试"它,因为错误中显示的元素的名称可能会在XML文件的不同位置多次出现.

我的代码如下所示,使用LibXML根据模式验证XML文件.

#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;

my $schema_file = 'MySchema.xml';
my $document    = 'MyFile.xml';

my $schema = XML::LibXML::Schema->new(location => $schema_file);

my $parser = XML::LibXML->new;
my $doc    = $parser->parse_file($document);

eval { $schema->validate($doc) };
die $@ if $@;

print "$document validated successfully\n";
Run Code Online (Sandbox Code Playgroud)

xml validation perl libxml2

6
推荐指数
1
解决办法
4665
查看次数

使用perl处理大型xml文件

我有一个大约200MB的XML文件,我希望逐行提取所选信息.

我用perl编写了一个脚本,使用模块XML :: LibXML解析文件内容,然后循环内容并逐行提取信息.这是无效的,因为它将整个文件读入内存,但我喜欢LibXML,因为我可以使用我需要的信息的XPath位置.

我可以获得有关如何使我的代码更有效的建议.

通过搜索我已经知道XML :: SAX和XML :: LibXML :: SAX,但我找不到解释用法的文档,它们似乎不包括任何类型的XPath寻址结构.

xml perl sax libxml2

6
推荐指数
1
解决办法
1576
查看次数

Nokogiri无法使用UTF-16声明输出XML(理解和解决)

摘要

尝试读取和序列化具有UTF-16编码和声明的XML文档会导致Nokogiri在某个点之后产生垃圾.

  1. 这是一个错误,还是有合理的解释?
  2. 什么是避免它的最佳方法?

环境

C:\>nokogiri -v
# Nokogiri (1.5.5)
    ---
    warnings: []
    nokogiri: 1.5.5
    ruby:
      version: 1.9.3
      platform: i386-mingw32
      description: ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
      engine: ruby
    libxml:
      binding: extension
      compiled: 2.7.7
      loaded: 2.7.7
Run Code Online (Sandbox Code Playgroud)

细节

我有一个用UTF-16(LE)编码的XML文件,它还在顶部包含一个PI XML声明,表明编码是UTF-16.总结一下,它看起来像这样:

<?xml version="1.0" encoding="UTF-16" ?>
<Foo>
  <Bar><![CDATA[
Lorem ipsum dolor ...about 3900 more bytes of content here...
  ]]></Bar>
  <Jim>Oh! Hello there.</Jim>
</Foo>
Run Code Online (Sandbox Code Playgroud)

当我使用Nokogiri阅读本文时,一切似乎都很好:

xml = File.open('Simplified.xml','rb:utf-16le',&:read)
p xml.encoding                        # #<Encoding:UTF-16LE>
p xml.valid_encoding?                 # true
doc1 = Nokogiri.XML(xml,&:noblanks)
xml1 = doc1.to_xml.encode('utf-8')
p xml1.encoding                       # #<Encoding:UTF-8> …
Run Code Online (Sandbox Code Playgroud)

ruby xml character-encoding libxml2 nokogiri

6
推荐指数
1
解决办法
1330
查看次数

"查找"按顺序返回节点吗?

Do XML::LibXML::Node::find和相关方法是否保证节点列表总是按照XML文档中的顺序排序?

这对我来说很重要,因为我的文档对应于一个大数组,在这个数组中我希望能够在某些情况下删除一系列项目,并且我必须确保这样的内容一致地工作:

my @nodes = $dom->find('//MyElement[@attr=something]/descendant::Token/@id')
                ->get_nodelist;
for my $token ( reverse map { $_->value } @nodes ) {
    splice @my_big_array, $token, 1;
}
Run Code Online (Sandbox Code Playgroud)

困难在于没有记录XML::LibXML,我不知道这是否取决于libxml2实现,我不了解的文档,或者DOM标准或其他W3C标准,这些标准显然没有被阅读我的凡人.

xml perl xpath dom libxml2

6
推荐指数
1
解决办法
175
查看次数

如何在Mac OS上安装libxml2-dev libxslt-dev

我已经用homebrew安装了libxml2和libxslt,但它不想安装libxml2-dev或libxslt-dev: Error: No available formula for libxml2-dev

我有点子,港口,以及我能找到的一切.我甚至安装了Xcode命令行工具,但没有运气.在Mac 10.10上安装libxml2-dev和libxslt-dev的方法是什么?

python macos pip libxml2

6
推荐指数
1
解决办法
7714
查看次数

麻烦在Mac OS X Yosemite v.10.10.1上安装Nokogiri因为libxml2升级到Rails 4.2.0

我正在尝试在我的计算机上安装Rails 4.2.0,但我在安装Nokogiri时遇到问题.我按照第一个答案中的步骤" 捆绑安装停在Nokogiri ",但是当我跑步时brew install nokogiri,我得到以下内容:

Activating libxslt 1.1.28 (from /Users/dseibert/.rvm/rubies/ruby-2.2.0/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2/ports/x86_64-apple-darwin14.0.0/libxslt/1.1.28)...
checking for main() in -llzma... yes
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
-----
libxml2 is missing.  Please locate mkmf.log to investigate how it is failing.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails libxml2 nokogiri osx-yosemite

6
推荐指数
1
解决办法
1467
查看次数

在Swift 3(libxml2)中将String转换为UnsafePointer <xmlChar>的更快捷的方法

我正在为libxml2 C库开发一个Swift 3包装器.

转换String为两种便捷方法,UnsafePointer<xmlChar>反之亦然.在libxml2 xmlChar中声明为unsigned char.

  • UnsafePointer<xmlChar>String是简单

    func stringFrom(xmlchar: UnsafePointer<xmlChar>) -> String {
        let string = xmlchar.withMemoryRebound(to: CChar.self, capacity: 1) {
            return String(validatingUTF8: $0)
        }
        return string ?? ""
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 对于StringUnsafePointer<xmlChar>我试过,例如很多事情

    let bytes = string.utf8CString.map{ xmlChar($0) }
    return UnsafePointer<xmlChar>(bytes)
    
    Run Code Online (Sandbox Code Playgroud)

    但这不起作用,我发现的唯一可行解决方案是

    func xmlCharFrom(string: String) -> UnsafePointer<xmlChar> {
        let pointer = (string as NSString).utf8String
        return unsafeBitCast(pointer, to: UnsafePointer<xmlChar>.self)
    }
    
    Run Code Online (Sandbox Code Playgroud)

有没有更好的,swiftier没有桥投地的方式NSStringunsafeBitCast

unsafe-pointers libxml2 swift swift3

6
推荐指数
1
解决办法
658
查看次数