我试图让读者从破碎的XML中恢复.将libxml2.XML_PARSE_RECOVER选项与DOM api(libxml2.readDoc)配合使用可以从实体问题中恢复.
但是,使用带有阅读器API的选项(由于我们正在解析的文档的大小,这是必不可少的)不起作用.它只是陷入永久循环(使用reader.Read()返回-1):
示例代码(小例子):
import cStringIO
import libxml2
DOC = "<a>some broken & xml</a>"
reader = libxml2.readerForDoc(DOC, "urn:bogus", None, libxml2.XML_PARSE_RECOVER | libxml2.XML_PARSE_NOERROR)
ret = reader.Read()
while ret:
print 'ret: %d' % ret
print "node name: ", reader.Name(), reader.NodeType()
ret = reader.Read()
Run Code Online (Sandbox Code Playgroud)
任何想法如何正确恢复?
对于另一个问题,我创建了一些与我的开发机器相关的XML相关代码,但在viper键盘上没有,我在测试之前将其添加到我的答案中.
我可以将我的问题减少到DOMXPath::query()我的系统和键盘之间返回的节点顺序不同.
XML: <test>This is some <span>text</span>, fine.</test>
当我查询所有文本节点时//child::text(),结果不同:
#0: This is some
#1: , fine.
#2: text
Run Code Online (Sandbox Code Playgroud)
我的机器:
#0: This is some
#1: text
#2: , fine.
Run Code Online (Sandbox Code Playgroud)
我不熟悉xpath,我确实理解为什么会发生这种情况以及如何使用PHP实现来影响返回顺序.
编辑:
进一步测试显示LIBXML_VERSION两个系统之间存在差异:
Viper Codepad: 20626 (2.6.26; 6 Jun 2006)
My Machine...: 20707 (2.7.7; 15 Mar 2010)
Run Code Online (Sandbox Code Playgroud) 我在C中使用libxml,这就是我创建xml的方法:
xmlDocPtr createXmlSegment(char *headerContent, char *dataContent)
{
xmlDocPtr doc;
doc = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr rdt, header, data;
rdt = xmlNewNode(NULL, BAD_CAST "rdt-segment");
xmlSetProp(rdt, "id", "1");
header = xmlNewNode(NULL,BAD_CAST "header");
data = xmlNewNode(NULL, BAD_CAST "data");
xmlNodeSetContent(header, BAD_CAST headerContent);
xmlNodeSetContent(data, BAD_CAST dataContent);
xmlAddChild(rdt, header);
xmlAddChild(rdt, data);
xmlDocSetRootElement(doc, rdt);
return doc;
}
Run Code Online (Sandbox Code Playgroud)
这就是我想从那个xml获取数据的方式:
int getDataFromXmlSegment(char *data, char *header, char *content)
{
xmlDocPtr doc = xmlReadMemory(data, strlen(data), NULL, NULL, XML_PARSE_NOBLANKS);
xmlNode *rdt = doc->children;
xmlNode *headerNode = rdt->children;
header = (char *)headerNode->content;
content = …Run Code Online (Sandbox Code Playgroud) 我认为这是一个非常简单的问题,但尽管进行了大量搜索,但我无法弄明白.
我试图解析以下XML以打印类似于TAG = VALUE的内容,以便我可以将其写入CSV文件.问题是每个样本的标签并不总是相同.我似乎无法弄清楚如何获得实际的标签名称.任何帮助赞赏!
XML文件 -
<Statistics>
<Stats>
<Sample>
<Name>System1</Name>
<Type>IBM</Type>
<Memory>2GB</Memory>
<StartTime>2012-04-26T14:30:01Z</StartTime>
<EndTime>2012-04-26T14:45:01Z</EndTime>
</Sample>
<Sample>
<Name>System2</Name>
<Type>Intel</Type>
<Disks>2</Disks>
<StartTime>2012-04-26T15:30:01Z</StartTime>
<EndTime>2012-04-26T15:45:01Z</EndTime>
<Video>1</Video>
</Sample>
</Stats>
</Statistics>
Run Code Online (Sandbox Code Playgroud)
脚本 -
#!/usr/bin/perl
use XML::LibXML;
$filename = "data.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($filename);
for my $sample ($xmldoc->findnodes('/Statistics/Stats/Sample')) {
print $sample->nodeName(), ": ", $sample->textContent(), "\n";
}
Run Code Online (Sandbox Code Playgroud) 我试图让Nokogiri在osx 10.5.8上工作,遇到了一个绊脚石.
尝试http://nokogiri.org/tutorials/installing_nokogiri.html 然后http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html
一位同事一直试图帮助,但无法摆脱这个错误信息:
未加载库:/usr/local/lib/libxml2.2.dylib ...原因:库版本不兼容:nokogiri.bundle需要11.0.0或更高版本,但libxml2.2.dylib提供版本10.0.0
我们尝试使用新安装的库来编译gem,但仍然遇到此错误.
任何帮助或指示真的很感激!
我得到了osx 10.6的副本 - 这有用吗?
谢谢
我正在尝试在Mavericks上运行一个相当旧的Rails应用程序,其中一个要求是: - Ruby ree-1.8.7-2009.10 - Rails 3.0.0 - libxml-ruby 1.1.4(这是与其他版本兼容的最新版本)宝石
我安装了最新的libxml2包.它的版本来自Homebrew(2.9.1).
要安装此gem,我使用以下命令:
$ CC=gcc-4.2 gem install libxml-ruby -v '1.1.4'
Run Code Online (Sandbox Code Playgroud)
输出建议成功:
Building native extensions. This could take a while...
Successfully installed libxml-ruby-1.1.4
1 gem installed
Run Code Online (Sandbox Code Playgroud)
虽然当我尝试运行一些rake任务时,即创建数据库bundle exec rake db:create
我收到以下错误:
$ bundle exec rake db:create [ree-1.8.7-2009.10@mygemset]
rake aborted!
dlsym(0x7ffa2d83bbe0, Init_libxml_ruby): symbol not found - /Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/libxml-ruby-1.1.4/lib/libxml_ruby.bundle
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/libxml-ruby-1.1.4/lib/libxml_ruby.bundle
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/libxml-ruby-1.1.4/lib/libxml.rb:9
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/myuser/Developer/my-project/vendor/private_gems/restful_authentication-1.4.9/lib/sso/sso.rb:3
/Users/myuser/.rvm/gems/ree-1.8.7-2009.10@mygemset/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in …Run Code Online (Sandbox Code Playgroud) libxml2最新版本是否支持XSD 1.1进行XML验证?
我使用libxml2 v2.6.30进行XSD(schema)1.0的XML验证.但是,我不支持XSD v1.1.我不确定最新版本的libxml2是否支持XSD 1.1.任何的想法?
我试图在我的mac os x中添加libvisio来自https://wiki.documentfoundation.org/DLP/Libraries/libvisio
我已经添加了下面列出的所有依赖:
boost
gperf
icu
librevenge
libxml2
perl
doxygen
Run Code Online (Sandbox Code Playgroud)
添加依赖项后,我试图运行波纹管命令.
$ ./autogen.sh ''# only needed for building from git''
$ ./configure
$ make
$ make install
Run Code Online (Sandbox Code Playgroud)
但我有第二个命令的问题 $ ./configure
得到波纹管错误.
configure: error: Package requirements (
libxml-2.0
) were not met:
No package 'libxml-2.0' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables LIBXML_CFLAGS
and LIBXML_LIBS to avoid the need to call pkg-config.
See the …Run Code Online (Sandbox Code Playgroud) 我最近将我的 mac-os 更新为 Mojave。我正在使用 Nginx,它在我以前的操作系统上运行,但在更新到 Mojave 后,我无法启动我的 Nginx。所以我尝试再次安装它,首先,它给了我 c 编译器错误,所以我下载了 Xcode 命令行工具,它消失了。现在它给了我找不到 libxml2/libxslt 库。我尝试使用 brew 安装它,但仍然出现相同的错误。我不确定出了什么问题。
我已经使用 brew install 下载了 libxml2 和 libxslt。
我的配置脚本。
./configure \
--prefix=/opt/nginx/$NGINX_NAME_VERSION \
--pid-path=/var/run/nginx.pid \
--conf-path=/etc/nginx/$NGINX_NAME_VERSION/conf/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--lock-path=/var/lock/nginx.lock \
--http-client-body-temp-path=/var/tmp/nginx/body \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--with-debug \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-mail \
--with-mail_ssl_module \
--with-cc-opt=-I/usr/local/opt/openssl/include \
--with-ld-opt=-L/usr/local/opt/openssl/lib \
--builddir=$NGINX_BUILD_PATH
Run Code Online (Sandbox Code Playgroud)
错误 :
checking …Run Code Online (Sandbox Code Playgroud) 我想使用go-libxml2更新XML元素值。该元素可以出现在XML文档中的任何位置。例如,在下面的XML中,我想更新一个元素
<?xml version="1.0" encoding="UTF-8"?>
- <note>
<to>Tove</to>
<from>Jani</Ffrom>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<url>http://example.com</url>
<links>
<url>http://link1.com</url>
<url>http://link2.com</url>
</links>
</note>
Run Code Online (Sandbox Code Playgroud)
我想在所有值中添加其他查询参数。所以我的结果XML将如下
<?xml version="1.0" encoding="UTF-8"?>
- <note>
<to>Tove</to>
<from>Jani</Ffrom>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<url>http://example.com?param=value</url>
<links>
<url>http://link1.com?param=value</url>
<url>http://link2.com?param=value</url>
</links>
</note>
Run Code Online (Sandbox Code Playgroud)
如何使用go-libxml2修改XML?