代码之家  ›  专栏  ›  技术社区  ›  brianegge

使用XMLStarlet时出现命名空间错误

  •  0
  • brianegge  · 技术社区  · 16 年前

    xml sel -t -m "Config/Application" -v "@rmiPort" -n config.xml
    namespace error : Namespace prefix log4j on configuration is not defined
                        <log4j:configuration>
                                            ^
    

    config.xml有以下声明:

    <?xml version="1.0"?>
    <!DOCTYPE Config SYSTEM "../../../dtds/Config.dtd">
    <Config>
    ...
    <Logger>
     <log4j:configuration>
    ...
    

    config.dtd如下所示:

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!ENTITY % log4j:configuration SYSTEM "log4j.dtd">
    %log4j:configuration;
    ...
        <!ELEMENT Logger ((log4j:configuration)*)>
    

    知道如何修复名称空间或消除错误吗?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Simon Brangwin    16 年前

    您需要在select的全局选项中声明名称空间。

    Log4j使用下面的名称空间。

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    

    您还没有向我们提供完整的config.xml,但根据猜测,我认为您的XMLStarlet命令应该如下所示。

    xml sel -N log4j="http://jakarta.apache.org/log4j/" -t -m "Config/Application/Logger/log4j:configiguration/" -v "@rmiPort" -n config.xml