标签: dtd

如果未在输入文件中指定,则如何强制SAX解析器使用DTD?

如何在解析文档时强制SAX解析器(特别是Java中的Xerces)在输入文档中没有任何 doctype的情况下使用DTD ?这甚至可能吗?

以下是我的方案的更多细节:

我们有一堆XML文档符合由多个不同系统生成的相同DTD(我无法更改).其中一些系统会在其输出文档中添加doctype,而其他系统则不会.有些使用命名字符实体,有些则不使用.有些使用命名字符实体而不声明doctype. 我知道这不是犹太人,但这是我必须要合作的.

我正在研究需要用Java解析这些文件的系统.目前,它通过首先将XML文档作为流读取,尝试检测是否已定义doctype,并添加doctype声明(如果尚未存在)来处理上述情况.问题是这个代码是错误的,我想用更干净的东西替换它.

文件很大,所以我不能使用基于DOM的解决方案.我也在尝试解析字符实体,因此使用XML Schema 没有帮助.

如果您有解决方案,请直接发布而不是链接到它?如果将来有一个带有死链接的正确解决方案,它不会做很好的Stack Overflow.

java doctype dtd sax xerces

11
推荐指数
1
解决办法
2433
查看次数

针对PHP中给定DTD的XML验证

在PHP中,我试图使用我的应用程序指定的DTD来验证XML文档 - 而不是通过外部获取的XML文档.DOMDocument类中的validate方法似乎只使用XML文档本身指定的DTD进行验证,因此这不起作用.

可以这样做,以及如何或者我必须将我的DTD转换为XML模式,以便我可以使用schemaValidate方法?

(这似乎是在Validate XML中使用PHP中的自定义DTD但没有正确答案的问题,因为解决方案仅依赖于目标XML指定的DTD)

php xml validation dtd

10
推荐指数
1
解决办法
7347
查看次数

打开extern DTD(w3.org,xhtml1-transitional.dtd)时出错.503服务器不可用

我正在尝试对xhtml文档进行xpath查询.使用.NET 3.5.

该文件如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
   ....
  </head>
  <body>
    ...
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

因为文档包含各种char实体(&nbsp;等等),所以我需要使用DTD,以便使用XmlReader加载它.所以我的代码看起来像这样:

var s = File.OpenRead(fileToRead)
var reader = XmlReader.Create(s, new XmlReaderSettings{ ProhibitDtd=false });
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它会返回

打开外部DTD'http: //www.w3.org/TR/xhtml1-transitional.dtd '时发生错误:远程服务器返回错误:(503)服务器不可用.

现在,我知道为什么我得到503错误. W3C非常清楚地解释了这一点.

我见过"解决方法",人们只是禁用DTD.这是ProhibitDtd=true可以做的,它消除了503错误.

但在我的情况下导致其他问题 - 应用程序没有获得实体定义,因此不是格式良好的XML.如何在不访问w3.org网站的情况下验证DTD并获取实体定义?


我认为.NET 4.0有一个漂亮的内置功能来处理这种情况:XmlPreloadedResolver.但我需要.NET 3.5的解决方案.


相关:
- java.io.IOException:服务器返回HTTP响应代码:503

.net xml xhtml w3c dtd

10
推荐指数
1
解决办法
5869
查看次数

在相对路径上解析具有DTD架构的XML文件

我有以下java代码:


DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=db.parse(new File("/opt/myfile"));

/opt/myfile包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE archive SYSTEM "../../schema/xml/schema.dtd">
...

我收到以下错误:

java.io.FileNotFoundException: /../schema/xml/schema.dtd (No such file or directory)

这是一个大型java框架,它使用其他地方生成的XML文件.我认为相对路径是问题所在.我不认为在JVM启动之前更改cwd是可以接受的(路径来自JVM本身读取的配置文件),并且我没有找到在JVM运行时更改cwd的方法.如何使用适当的DTD解析此XML文件?

java xml dtd

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

XML,这是什么:null或空元素?

关于我的另一个问题:XML反序列化null元素?

我从第三方服务器获得这些元素用于API测试:

<Taxable />
<DefaultPurchasePrice />
Run Code Online (Sandbox Code Playgroud)

我刚刚意识到,现在我自己也在混淆自己这样的元素是否代表空对象或空.

谈论对象,它们是一样的,null对象通常意味着空对象引用对吗?但是尝试将XML元素映射到数据字段/值,它们可能是不同的,即空字符串是空字符串,但对于十进制价格或布尔值,它们是未定义的,等于空,但不会为空,除非定义它们可以为空.

同样,我的XmlSerializer的问题是无法处理像这样的空元素.我可以在我的代码中轻松修复它.或者我应该问人们提供的XML有一个定义良好的XML吗?因为看起来像这样的空XML元素是未定义的:它在这里,但是对于XML元素本身可能是null还是空无关紧要?但是对于那个元素,我的代码需要弄清楚如何处理它,除非我将所有的C#类数据字段设置为字符串类型.否则,如果我的代码试图直接将空或空XML元素映射到某个数据字段,它肯定会失败.

我不得不问这个问题,因为我遇到XML有很多这些元素,对于那些特殊元素,我的.NET XML序列化代码需要将这些字段映射为字符串,如果字符串不为空,我将它们视为对应的数据类型,否则我将它们设置为null.在我进行反序列化之前,我最终删除了那些空元素,因为它更容易.但我徘徊:"我在代码中真正做了什么?我只是删除了空元素或空元素吗?因为它们明显不同!但是编写XML的人认为它们是相同的,因为XML本身没有概念'null',有些人认为我有责任决定它是null还是空.但XML确实能让你以更清晰的方式表示'null'元素

编辑:

在我提供的示例中,这两个元素显然应该是null而不是空元素.XML实际上没有null的概念,但是这些元素可以省略(如果它们是null,不要将它们放入XML中),或者使用更好的表示,如@svick所述.或者在其他情况下,应该在有意义时使用空元素.但不适用于Decimal或Boolean.

xml null xsd dtd xmlserializer

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

单元测试报告的XML格式规范(DTD,XSD ..)

许多工具为单元测试报告生成并使用相同的XML文件格式.

示例(来源):

<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="0" failures="0" hostname="hazelnut.osuosl.org" name="net.cars.engine.MoteurTest" tests="6" time="0.021" timestamp="2007-11-02T23:13:50">
  <properties>
    <property name="java.vendor" value="IBM Corporation" />
    <property name="os.name" value="Linux" />
    <!-- more property tags-->
  </properties>
  <testcase classname="net.cars.engine.MoteurTest" name="hasBougie" time="0.0010" />
  <testcase classname="net.cars.engine.MoteurTest" name="hasCarburatueur" time="0.0010" />
  <!-- more testcase tags-->
  <system-out><![CDATA[]]></system-out>
  <system-err><![CDATA[]]></system-err>
</testsuite>
Run Code Online (Sandbox Code Playgroud)

经过一番研究后,我发现该格式是由apache基础(由ant项目提出)提出的.

由...生产:

  • junit ant任务
  • antunit
  • maven surefire
  • TestNG的
  • ...

消费者:

  • junitreport蚂蚁任务
  • maven surefire-reports
  • 巡航控制
  • Luntbuild的
  • 哈德森/詹金斯
  • IntelliJ TeamCity
  • Parabuild
  • JUnit PDF报告
  • ...

我能找到的唯一文件是ant wiki上的这个页面: Proposals/EnhancedTestReports

是否有这种格式的规范(DTD,XSD)?

我想从手写一个这样的文件...(或者如果你知道的话,可以使用librairy)......

xml xsd dtd unit-testing report

10
推荐指数
1
解决办法
7131
查看次数

错误:SyntaxError:使用jQuery创建标记时的DOM异常12

我有以下javascript:

var orderItemQuantity = $('<input/>', {
    type: 'hidden',
    name: 'order_detail[][quantity]',
    value: itemQuantity
});
Run Code Online (Sandbox Code Playgroud)

上面的javascript引发以下错误消息:

Error: SyntaxError: DOM Exception 12
Run Code Online (Sandbox Code Playgroud)

这个工作没有错误:

var newListItem = $('<li/>', {
    html:
    $('#item_name_'+itemId).text() +
    '(' + $('#item_quantity_' + itemId).val() +')' +
    '<a onclick="removeItem(' + itemId + ')">Delete this</a>' +
    '<input type="hidden" name="order_detail[][item_id]" value="' + itemId + '"/>',
    id: itemId
});
Run Code Online (Sandbox Code Playgroud)

我检查了以下问题,但答案没有明确说明正确的原因为什么.

这是我的DTD:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)

问题:为什么$('<input/>')并且$('<input>')抛出所述异常而$('<li/>')不是问题?

javascript jquery dom dtd syntax-error

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

Notepad++ 上禁止使用 DTD

我是 XML 新手,正在使用 XML 工具插件在 Notepad ++ 上通过 DTD 验证测试简单的 XML。

但是,每当我尝试验证文件时,我都会收到 DTD 被禁止的信息。请参阅下面的我尝试运行的示例。

<?xml version="1.0"?>
<!DOCTYPE root[
         DTD is prohibited. <---------------error message I get on Notepad ++
    <!ELEMENT root (dept*, staff*)>
    <!ELEMENT dept (#PCDATA)>
    <!ELEMENT staff (staff | name)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST dept id ID #REQUIRED>
    <!ATTLIST staff id ID #REQUIRED dept IDREF #IMPLIED>
]>
<root>
    <dept id="i1">it</dept>
    <dept id="i2">law</dept>
    <staff id="s3">
        <name>steve</name>
    </staff>
    <staff id="s2" dept="i1">
        <name>jerry</name>
    </staff>
    <staff id="s4" dept="i2">
        <staff id="s5">
            <name>peter</name>
        </staff>
    </staff>
</root> …
Run Code Online (Sandbox Code Playgroud)

xml dtd notepad++

10
推荐指数
1
解决办法
4931
查看次数

在单元测试中验证XML的最佳方法是什么?

我有一个类,它有一个ToString生成XML 的方法.我想对它进行单元测试,以确保它生成有效的xml.我有一个DTD来验证XML.

我应该在单元测试中将DTD作为字符串包含在内以避免依赖它,还是有更聪明的方法来做到这一点?

xml language-agnostic dtd unit-testing

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

XML属性可以有空格吗?

我正在为xml文档创建一个DTD.我有一个xml元素的Enumerated属性.我的问题是:属性Type是否有空格?

例如:

  <!ELEMENT Link (#PCDATA)>
  <!ATTLIST Link Type (Amendment|Reference|Superseded|Modified|
  Corrigendum|Corresponds|Endorsement|Equivalent|Identical|Modified|
  Not Equivalent|Note taken of|Related|Similar) "Reference">
Run Code Online (Sandbox Code Playgroud)

所以我想要的是:

  <Link Type="Not Equivalent" \>
Run Code Online (Sandbox Code Playgroud)

但这似乎是barf.

我需要为空间做一些神奇的伏都教吗?还是只是运气不好?

我看了几个 地方,但看不到任何参考

谢谢!

更新

对不起 - 当我说barf时,我的意思是当我尝试验证文档时(例如在Web浏览器中打开它),我收到一条错误消息:在ATTLIST枚举中找到无效字符.处理资源'file:/// C:/myxmldocument.xml'时出错....

xml dtd

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