标签: libxml2

使用XML :: LibXML:如何创建名称空间和子元素并使它们协同工作?

我正在尝试用FOAF和Perl做一些事情.我对目前的解决方案不满意,我想自己动手.请不要参考除以外的任何模块XML::LibXML.

这里参考的是FOAF文件的片段

<rdf:RDF
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
      xmlns:foaf="http://xmlns.com/foaf/0.1/"
      xmlns:admin="http://webns.net/mvcb/">

  <foaf:Person rdf:ID="me">
  <foaf:name>Evan Carroll</foaf:name>
....
Run Code Online (Sandbox Code Playgroud)

现在,排除空白,我正在尝试重新创建它XML::LibXML.但是,我很遗憾地陷入了第一线.这只关注第一行:

我读到这个

  1. 元素RDF,在命名空间中rdf声明
    1. 带有值的rdf名称空间属性xmlnshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
    2. 带有值的rdfs名称空间属性xmlnshttp://www.w3.org/2000/01/rdf-schema#
    3. 带有值的foaf名称空间属性xmlnshttp://xmlns.com/foaf/0.1/
    4. 带有值的admin名称空间属性xmlnshttp://webns.net/mvcb/

首先你需要一个元素rdf:RDF,这似乎很棘手.阅读我找到的文档,但这似乎没有做我想要的:XML::LibXML::DocumentcreateElementNS()

use XML::LibXML;
my $doc = XML::LibXML::Document->new( '1.0', 'UTF-8' );
my $foaf = $doc->createElementNS( 'RDF', 'rdf' );
print $foaf->toString; # prints <rdf xmlns="RDF"/>
Run Code Online (Sandbox Code Playgroud)

现在,我尝试createElement('rdf:RDF')它的工作原理!我得到了根元素rdf:RDF.这是我们应该如何创建根元素?我只是读错了XML吗?

现在,我需要创建属性(模式声明).我尝试了记录不佳的文件XML::LibXML::Document, …

xml perl xml-namespaces libxml2

2
推荐指数
1
解决办法
5104
查看次数

Python和libxml2:如何使用XPATH在xml节点中进行迭代

我在从XML树中检索信息时遇到问题.

我的XML有这样的形状:

<?xml version="1.0"?>
<records xmlns="http://www.mysyte.com/foo">
  <record>
    <id>first</id>
    <name>john</name>
    <papers>
      <paper>john_1</paper>
      <paper>john_2</paper>
    </papers>
  </record>
  <record>
    <id>second</id>
    <name>mike</name>
    <papers>
      <paper>mike_a</paper>
      <paper>mike_b</paper>
    </papers>
  </record>
  <record>
    <id>third</id>
    <name>albert</name>
    <papers>
      <paper>paper of al</paper>
      <paper>other paper</paper>
    </papers>
  </record>
</records>
Run Code Online (Sandbox Code Playgroud)

我想要做的是提取如下的数据元组:

[{'code': 'first', 'name': 'john'}, 
 {'code': 'second', 'name': 'mike'}, 
 {'code': 'third', 'name': 'albert'}]
Run Code Online (Sandbox Code Playgroud)

现在我写了这个python代码:

try:
  doc = libxml2.parseDoc(xml)
except (libxml2.parserError, TypeError):
  print "Problems loading XML"

ctxt = doc.xpathNewContext()
ctxt.xpathRegisterNs("pre", "http://www.mysyte.com/foo")

record_nodes = ctxt.xpathEval('/pre:records/pre:record')

for record_node in record_nodes:
  id = record_node.xpathEval('id')[0].content
  name = record_node.xpathEval('name')[0].content
  ret_list.append({'code': id, 'name': …
Run Code Online (Sandbox Code Playgroud)

python xml xpath libxml2

2
推荐指数
1
解决办法
8009
查看次数

为什么libxml2在元素名称上输出“文本”(当不是“文本”时)?

我使用libxml2进行XML解析。libxml网站上的示例代码很难遵循,并且似乎缺少一些细节。我通过Googling找到了以下代码,所以我什至都不认为这是正确的方法,但是它在我编写的示例学习程序中有效,但在本程序中却无效。我仍然不知道在C ++中使用libxml的正确方法,所以我在黑暗中运行,希望能找到有用的东西。

XML文件可以正确加载,并且此函数可以root->name正确输出,但是当它通过子级时,它只会text在XML 输出,cur->name我不知道为什么。我必须将计数器放在那里以阻止它进入无限循环。我在XML文件中的空白处读取了可能导致此问题的信息,但我不知道该怎么办。我只想要零件名称和ID。

xmlNode *cur = root;
cur = cur->xmlChildrenNode;

ofstream out;
out.open("errorlog.txt", ios::app);
out << "attempting reading current node\n";
out << "root: " << root->name << endl;

int counter = 0;

// advance until it hits stars
while(cur != NULL && counter < 10){
if ((!xmlStrcmp(cur->name, (const xmlChar *)"parts")))
    break;

    cur->next;
    counter++;
}

out << "counter: " << counter << endl;
out << "child: " << cur->name << endl;
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的XML文件:

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

c++ libxml2

2
推荐指数
1
解决办法
3961
查看次数

完全用Perl编写的XML-Parser的优点和缺点是什么?

完全用Perl编写的XML-Parser的优点和缺点是什么只提供像GNOME的LibXML这样的Parser的接口?

xml perl parsing libxml2

2
推荐指数
2
解决办法
547
查看次数

libxml2 xmlChar*到std :: wstring

libxml2似乎将所有字符串存储在UTF-8中,如xmlChar *.

/**
 * xmlChar:
 *
 * This is a basic byte in an UTF-8 encoded string.
 * It's unsigned allowing to pinpoint case where char * are assigned
 * to xmlChar * (possibly making serialization back impossible).
 */
typedef unsigned char xmlChar;
Run Code Online (Sandbox Code Playgroud)

由于libxml2是一个C库,没有提供程序来得到一个std::wstring出来的xmlChar *.我想知道在C++ 11中转换为a 的谨慎方法是使用mbstowcs C函数,通过类似这样的东西(正在进行中):xmlChar *std::wstring

std::wstring xmlCharToWideString(const xmlChar *xmlString) {
    if(!xmlString){abort();} //provided string was null
    int charLength = xmlStrlen(xmlString); //excludes null terminator …
Run Code Online (Sandbox Code Playgroud)

c++ string unicode libxml2

2
推荐指数
1
解决办法
3851
查看次数

在linux上安装libxml2的问题

我试图在虚拟机上的Ubuntu上安装libxml2-2.9.1.我按照以下链接中的步骤进行操作:http : //www.linuxfromscratch.org/blfs/view/svn/general/libxml2.html http://www.geeksww.com/tutorials/libraries/libxml/installation/ installing_libxml_on_ubuntu_linux.php#评论

我在编译步骤后陷入困境.当我按照任何一个链接时,我会遇到同样的错误.错误是

make[3]: Leaving directory `/home/abhijit/Documents/libxml2-2.9.1/doc/examples'
make[2]: Leaving directory `/home/abhijit/Documents/libxml2-2.9.1/doc'
Making all in example
make[2]: Entering directory `/home/abhijit/Documents/libxml2-2.9.1/example'
  CC     gjobread.o
  CCLD   gjobread
make[2]: Leaving directory `/home/abhijit/Documents/libxml2-2.9.1/example'
Making all in xstc
make[2]: Entering directory `/home/abhijit/Documents/libxml2-2.9.1/xstc'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/abhijit/Documents/libxml2-2.9.1/xstc'
Making all in python
make[2]: Entering directory `/home/abhijit/Documents/libxml2-2.9.1/python'
make  all-recursive
make[3]: Entering directory `/home/abhijit/Documents/libxml2-2.9.1/python'
Making all in .
make[4]: Entering directory `/home/abhijit/Documents/libxml2-2.9.1/python'
  CC     libxml.lo
libxml.c:14: fatal error: Python.h: No such …
Run Code Online (Sandbox Code Playgroud)

ubuntu libxml2

2
推荐指数
2
解决办法
7336
查看次数

使用Perl解析XML

总菜鸟在这里,所以我很抱歉我提前无知.

我搜索和搞砸的大部分内容都集中在使用XML::LibXMLXPath.

我遇到的问题是我不想在标签之间捕获文本:我需要标签的值.

这是我的XML结构

<users>
  <entry name="asd">
    <permissions>
      <role-based>
        <superuser>yes</superuser>
      </role-based>
    </permissions>
  </entry>
  <entry name="fgh">
    <permissions>
      <role-based>
        <superuser>yes</superuser>
      </role-based>
    </permissions>
    <authentication-profile>RSA Two-Factor</authentication-profile>
  </entry>
  <entry name="jkl">
    <permissions>
      <role-based>
        <superreader>yes</superreader>
      </role-based>
    </permissions>
    <authentication-profile>RSA Two-Factor</authentication-profile>
  </entry>
</users>
Run Code Online (Sandbox Code Playgroud)

我试图获取name属性(不带引号),并确定此人是超级用户还是超级读者.

除了打印节点之外,我无法做很多事情.我需要将其转换为用户名结构中的CSV文件; 角色

xml perl libxml2 xml-libxml

2
推荐指数
1
解决办法
669
查看次数

xcode 6.1更新后找不到#import <libxml/tree.h>文件

我得到词法或预处理器问题,即xcode 6.1更新后找不到文件.我已经遵循下面的堆栈溢出解决方案但没有运气.

xcode更新后找不到#import <libxml/tree.h>文件

i found libxml2.2.dylib --> it is created during xcode 5 installation.
              libxml2.dylib  --> it is created during latest xcode6 update.
Run Code Online (Sandbox Code Playgroud)

使用finder/usr/lib /

I had used libxml2.2.dylib in xcode 5 but now i am getting above error in xcode 6. 
Run Code Online (Sandbox Code Playgroud)

另外如何从这个/ usr/lib/location添加libxml2.2.dylib lib,因为在构建阶段我无法导航到/ usr/lib/path.

请帮帮我.提前致谢.

build libxml2 ios gdataxml xcode6

2
推荐指数
1
解决办法
9345
查看次数

从PERL LibXML分析器获取完整的XML字符串

我正在处理需要处理的XML

<table>
<col1>check1</col1>
<col2>check2</col2>
<col3>check3</col3>
<content>
    <data>gt1</data>
    <data>check_gt1</data>
</content>
</table>
Run Code Online (Sandbox Code Playgroud)

我想<content><data>gt1</data><data>check_gt1</data></content>从解析器中获取“ ”。

我的解析代码如下,

my $parser = XML::LibXML->new();
my $respDom = $parser->parse_string($xmldata);
print "content is ".$respDom->getDocumentElement->findnodes("//content");
Run Code Online (Sandbox Code Playgroud)

上面的代码在节点内部产生了textContent。如何获取上面提到的数据?

xml perl libxml2

2
推荐指数
1
解决办法
792
查看次数

将新节点添加到一组现有节点(Perl XML :: LibXML)

使用Perl XML :: LibXML库,我正在尝试使用循环向XML文档中的每个现有节点添加一个新节点.这是我到目前为止的尝试:

#!/usr/bin/perl -w
use 5.14.2;
use XML::LibXML;

my $filename = "xml_doc.xml";
my $parser = XML::LibXML->new();
$parser->keep_blanks(0);
my $dom = $parser->parse_file($filename);

for my $node ($dom->findnodes("/poem/stanza/v"))
{
    my $elm = $dom->createElement('newnode');
    $elm->appendText('This is a new node');
    $_->addChild($elm);
}

say $dom->toString(1);
Run Code Online (Sandbox Code Playgroud)

文件'xml_doc.xml':

<?xml version="1.0" encoding="UTF-8"?>
<poem>
<stanza>
<v>As I was going to Bonner,</v>
<v>Upon my word of honor,</v>
<v>I met a pig</v>
<v>Without a wig,</v>
<v>As I was going to Bonner.</v>
</stanza>
</poem>
Run Code Online (Sandbox Code Playgroud)

程序失败,错误"无法调用方法"addChild"在batch_add_nodes.pl第16行的未定义值上."

任何提示都会受到欢迎.

xml perl libxml2

2
推荐指数
1
解决办法
135
查看次数

标签 统计

libxml2 ×10

xml ×6

perl ×5

c++ ×2

build ×1

gdataxml ×1

ios ×1

parsing ×1

python ×1

string ×1

ubuntu ×1

unicode ×1

xcode6 ×1

xml-libxml ×1

xml-namespaces ×1

xpath ×1