我正在尝试用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.但是,我很遗憾地陷入了第一线.这只关注第一行:
我读到这个
RDF,在命名空间中rdf声明
rdf名称空间属性xmlnshttp://www.w3.org/1999/02/22-rdf-syntax-ns#rdfs名称空间属性xmlnshttp://www.w3.org/2000/01/rdf-schema#foaf名称空间属性xmlnshttp://xmlns.com/foaf/0.1/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树中检索信息时遇到问题.
我的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) 我使用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) 完全用Perl编写的XML-Parser的优点和缺点是什么只提供像GNOME的LibXML这样的Parser的接口?
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) 我试图在虚拟机上的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) 总菜鸟在这里,所以我很抱歉我提前无知.
我搜索和搞砸的大部分内容都集中在使用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文件; 角色
我得到词法或预处理器问题,即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.
请帮帮我.提前致谢.
我正在处理需要处理的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。如何获取上面提到的数据?
使用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行的未定义值上."
任何提示都会受到欢迎.