小编MRA*_*MRA的帖子

如何在巨大的XML文件中执行命令行XPath查询?

我有一组XML文件,其中一些非常大(最多约5000万个元素节点).我正在使用它xmllint来验证这些文件,由于流API,它甚至可以很好地工作.

xmllint --loaddtd --stream --valid /path/to/huge.xml
Run Code Online (Sandbox Code Playgroud)

我最近了解到,xmllint它还能够执行命令行XPath查询,这非常方便.

xmllint --loaddtd --xpath '/root/a/b/c/text()' /path/to/small.xml
Run Code Online (Sandbox Code Playgroud)

但是,这些XPath查询不适用于巨大的XML文件.一段时间后我才收到"被杀"的消息.我尝试启用流式传输API,但这只会导致无输出.

xmllint --loaddtd --stream --xpath '/root/a/b/c/text()' /path/to/huge.xml
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用XPath查询时启用流模式xmllint?是否有其他/更好的方法可以对巨大的XML文件执行命令行XPath查询?

xml xpath xmllint

9
推荐指数
1
解决办法
1767
查看次数

如何将相关系统DTD加载到StAX解析器中?

我正在使用woodstox为XML文件实现StAX解析器.假设我的文件系统中的公共目录中有一个匹配DTD的有效XML文件.

/path/to/test.xml
/path/to/test.dtd
Run Code Online (Sandbox Code Playgroud)

XML使用相对系统标识符声明引用其DTD,如下所示:

<!DOCTYPE test SYSTEM "test.dtd">
Run Code Online (Sandbox Code Playgroud)

从验证的角度来看,一切似乎都很好.(是吗?xmllint不会抱怨.)但是,当我尝试使用下面的代码解析文件时,woodstox会抛出java.io.FileNotFoundException,因为它无法找到相对的DTD文件.在我看来,实现尝试相对于工作目录而不是相对于XML文件对象访问DTD文件.

import java.io.FileInputStream;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

public class Test {

    public static void main( String[] args ) throws Exception {

        FileInputStream fileInputStream = new FileInputStream( args[0] );
        XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xmlInputFactory.createXMLStreamReader(fileInputStream);

        while( xsr.hasNext() ) {
            if( xsr.next() == XMLStreamConstants.DTD ) {
                System.err.println( xsr.getText() );
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 这是故意的吗?
  2. 是否有一种方便的方法来说服StAX解析器相对于给定的XML文件而不是相对于工作目录加载DTD?

xml stax dtd woodstox

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

Python的xml.etree.ElementTree叶元素的意外布尔行为

我在使用Python 2.6.5 xml.etree.ElementTree库时遇到了一些麻烦.特别是,如果我设置一个简单的xml元素,如下所示

>>> import xml.etree.ElementTree as etree
>>> xml = etree.fromstring("<a><b><c>xy</c></b></a>")
Run Code Online (Sandbox Code Playgroud)

访问内部元素节点时,我对库没有任何问题,例如:

>>> etree.tostring(xml.find('b'))
'<b><c>xy</c></b>'
>>> xml.find('b') == None
False
>>> bool(xml.find('b'))
True
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了对叶元素节点的一个奇怪的布尔解释,请参阅:

>>> etree.tostring(xml.find('b/c'))
'<c>xy</c>'
>>> xml.find('b/c') == None
False
>>> bool(xml.find('b/c'))
False
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一个命令中,元素xml.find('b/c')(显然是非None)的计算结果为False.这特别烦人,因为我不能使用这个成语

>>> leaf = xml.find('b/c'):
>>> if leaf:
>>>     do_stuff(leaf)
Run Code Online (Sandbox Code Playgroud)

检查是否存在叶元素.(我必须明确检查'xml.find('b/c')!=无'.)

有人可以解释这个(对我来说意外)的行为吗?

python xml elementtree

5
推荐指数
1
解决办法
840
查看次数

有没有办法识别何时使用jQuery将文本拖放到输入元素中?

通常,当将标记的文本拖放到HTML输入元素中时,标记的文本将复制到该输入字段中的光标位置(并添加到任何现有文本).我想使用jQuery改变这种行为,使其类似于(例如)Firefox地址字段的行为,即:

  • 可以通过键入(像往常一样)添加和修改文本.
  • 当文本从外部拖动并放入输入元素时,输入中的所有现有文本都将被拖动的文本替换.
  • 在输入字段中拖放文本时,拖动的文本将移动到光标的位置.(很棒的功能,但不是那么重要)

有谁知道实现这一目标的方法?任何帮助表示赞赏.

在我看来,为此,我需要识别某种"拖放"事件并访问拖动的文本,虽然我不知道这是否可能.我想到的场景的(非功能性)模型如下所示:

HTML:

<p>drag-and-drop text into this:</p>
<input id="giveittome" value="some text"></input>
<p>other text</p>
<p>more text</p>
<p>whatever</p>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$('#giveittome').on('drag-and-drop' , function (event) {
    $(this).val(event.getDraggedText());
});
Run Code Online (Sandbox Code Playgroud)

来源@ jsFiddle.

html javascript jquery

4
推荐指数
1
解决办法
226
查看次数

在RDF中引用URN的目的是什么?

我想模拟一个关于出版物的RDF/XML语句(在命名空间中,比如'myns').我知道这个出版物在给定的URN下是已知的.在RDF中引用URN的方法是什么?我可以想到许多不同的方法来做到这一点,例如:

<myns:Publication rdf:about="item42">
    <myns:urn>urn:abc:xy:123-456789</myns:urn>
</myns:Publication>

<myns:Publication rdf:about="item42">
    <rdfs:seeAlso>urn:abc:xy:123-456789</rdfs:seeAlso>
</myns:Publication>

<myns:Publication rdf:about="item42">
    <owl:sameAs>urn:abc:xy:123-456789</owl:sameAs>
</myns:Publication>

<myns:Publication rdf:about="item42">
    <owl:sameAs rdf:reference="urn:abc:xy:123-456789" />
</myns:Publication>
Run Code Online (Sandbox Code Playgroud)

给出URN参考的正确(即最有益)方式是什么?

rdf semantic-web urn

3
推荐指数
1
解决办法
179
查看次数

使用条形图可视化与目标值的差异

我正在尝试使用R的gglot2包中的条形图来显示时间序列与其基线值的偏移量.例如,采用以下合成数据:

baseline = 400
steps <- sample(0:10,50,replace=TRUE) - sample(0:10,50,replace=TRUE)
value <- cumsum(steps) + baseline
time = 1:50
data <- data.frame(time,value)

print(value)
 [1] 400 400 397 397 393 400 394 395 389 389 385 395 400 399 405 403 399 401 399 401
[21] 401 401 398 397 395 395 401 402 393 400 399 398 406 412 417 413 410 401 400 399
[41] 394 401 406 406 401 404 411 413 404 402
Run Code Online (Sandbox Code Playgroud)

我可以按照原始尺度绘制图表,但这并不是真正的信息:

longdata <- ddply( data, "value", …
Run Code Online (Sandbox Code Playgroud)

r data-visualization ggplot2

3
推荐指数
1
解决办法
679
查看次数