小编Mel*_*nie的帖子

如何使用带有包含XSD的Java来验证XML文件?

我正在使用Java 5 javax.xml.validation.Validator来验证XML文件.我已经为一个仅使用导入的模式完成了它,一切正常.现在我正在尝试使用另一个使用import和一个include的模式进行验证.我遇到的问题是主模式中的元素被忽略,验证表明它无法找到它们的声明.

以下是我构建Schema的方法:

InputStream includeInputStream = getClass().getClassLoader().getResource("include.xsd").openStream();
InputStream importInputStream = getClass().getClassLoader().getResource("import.xsd").openStream();
InputStream mainInputStream = getClass().getClassLoader().getResource("main.xsd").openStream();
Source[] sourceSchema = new SAXSource[]{includeInputStream , importInputStream, 
mainInputStream };
Schema schema = factory.newSchema(sourceSchema);
Run Code Online (Sandbox Code Playgroud)

现在这里是main.xsd中声明的摘录

<xsd:schema xmlns="http://schema.omg.org/spec/BPMN/2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:import="http://www.foo.com/import" targetNamespace="http://main/namespace" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xsd:import namespace="http://www.foo.com/import" schemaLocation="import.xsd"/>
    <xsd:include schemaLocation="include.xsd"/>
    <xsd:element name="element" type="tElement"/>
    <...>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

如果我在main.xsd中复制我包含的XSD的代码,它可以正常工作.如果我不这样做,验证不会找到"元素"的声明.

java xml validation xsd

27
推荐指数
4
解决办法
5万
查看次数

如何在javascript中为默认命名空间中的XML节点分配前缀?

我有一个XML片段,我使用jQuery parseXML解析.大多数节点没有前缀,它们在默认命名空间中,有些具有前缀.

我需要将默认名称空间中的所有节点与前缀相关联.我已经确保这个前缀已经在XML的字符串版本中声明,并带有一个神奇的字符串替换(即xmlns:my="http://mydefaulns.com"在加载XML时在根级别声明.)

我尝试了以下方法:

var defaultNs="http://mydefaulns.com";
var xmlDoc = $.parseXML(stringXML);
$(xmlDoc).find("*").each(function() {
    if (this.namespaceURI=== defaultNs) {
        this.prefix = "my";
    }
}
Run Code Online (Sandbox Code Playgroud)

但它没有影响,当我写回来时,仍然没有前缀.

我还尝试加载XML并调用:

xmlDoc.firstChild.removeAttribute("xmlns")
Run Code Online (Sandbox Code Playgroud)

但该属性未被删除,因此前缀不会神奇地更新.

那时,我认为获得我想要的结果的唯一方法是使用新的前缀名称重新创建所有节点,复制所有属性.

这看起来非常极端,还有另一种方式吗?

输入(字符串):

<abc xmlns="http://mydefaulns.com" xmlns:my="http://mydefaulns.com"xmlns:other="http://other.com">
    <node1>Value</node1>
    <other:node2>Value2</other:node2>
</abc>
Run Code Online (Sandbox Code Playgroud)

期望的输出:

<my:abc xmlns:my="http://mydefaulns.com"xmlns:other="http://other.com">
    <my:node1>Value</my:node1>
    <other:node2>Value2</other:node2>
</my:abc>
Run Code Online (Sandbox Code Playgroud)

实际的XML更复杂,但这给了你一个想法.

我用jQuery.parse解析XML,然后使用返回字符串版本

function XMLDocumentToString(oXML) {
    if (typeof oXML.xml != "undefined") {
       return oXML.xml;
    } else if (XMLSerializer) {
        return (new XMLSerializer().serializeToString(oXML));
    } else {
        throw "Unable to serialize the XML";
    }    
 }
Run Code Online (Sandbox Code Playgroud)

javascript xml

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

Magento - 检查管理员和客户是否已登录

我有一个安装了Magento 1.4.0.1的Web服务器.我有另一个网站与它共享凭证.我已经设法检查客户是否已登录(在更改了Magento中的cookie位置之后),但是当我还试图弄清楚管理员是否已登录时,事情变得复杂.我只能得到正确的答案对于我要求的第一个会话(客户或管理员,第二个是永远不会登录).

我怎么能得到这两个答案?

这是我用来测试的代码:


require_once '../app/Mage.php';
umask(0) ;

Mage::app();

// Checking for customer session
Mage::getSingleton('core/session', array('name'=>'frontend') );
$session=Mage::getSingleton('customer/session', array('name'=>'frontend') );

if ($session->isLoggedIn()) {
    echo "Customer is logged in";
} else {
    echo "Customer is not logged in";
}

// Checking for admin session
Mage::getSingleton('core/session', array('name'=>'adminhtml') ); 
$adminsession = Mage::getSingleton('admin/session', array('name'=>'adminhtml'));

if($adminsession->isLoggedIn()) {
    echo "Admin Logged in";
} else {
    echo "Admin NOT logged in";
}
Run Code Online (Sandbox Code Playgroud)

因此,使用这样的代码,管理员永远不会登录.如果您首先将部分放在管理员身上,那么客户永远不会登录.看起来我在两个请求之间缺少一条线.

这可能与这个未解决的问题相同:Magento如何检查管理员是否在模块控制器中登录

这似乎是一个受欢迎的问题,但我找不到合适的解决方案......

谢谢你的帮助!

php session magento

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

为什么Text元素上的SVG bbox方法在不同的浏览器中给出不同的结果?

我有一个SVG文本元素.我在IE9,Chrome和Firefox中得到了它的bbox,这三个都给了我不同的价值.

我创建了一个非常简单的jsfiddle,显示SVG文本及其大小,以便您可以看到我的意思.我也试过客户端rect看看它是否更好.

HTML/SVG

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="75px">
    <text font-size="8pt" id="text_name" x="30" y="44" fill="#000000" stroke-width="0pt" font-family="Arial,Helvetica,sans-serif" text-anchor="middle" visibility="inherit">
        <tspan x="30" y="44" dy="8">Text Content</tspan></text>
</svg> 
<div id="size"></div>
Run Code Online (Sandbox Code Playgroud)

测试javascript

var bbox1 = document.getElementById("text_name").getBBox();
var f = document.getElementById("text_name").getClientRects();
document.getElementById("size").innerHTML = "<p>Width:" + bbox1.width + " Height: " + bbox1.height + "<br>" +  "Width:" + f[0].width +  " Height: " + f[0].height + "</p>";
Run Code Online (Sandbox Code Playgroud)

如您所见,使用的字体是常见的Arial,它存在于三个经过测试的浏览器中,并且还指定了font-size.因此我期望文本在所有三个浏览器中具有相同的界限.我需要计算文本边界,以便我可以将其导出并在其他工具中重复使用,因此我需要一致的值.

如果我能弄清楚为什么值不同,我可以进行适当的调整,以确保边界适合所有情况.

以下是getBBox()在不同浏览器中的结果:

IE9 : Width:61.029998779296875 Height: 12.260002136230468
Chrome: Width:61 Height: 14
Firefox: Width:64.63671875 Height: 13
Run Code Online (Sandbox Code Playgroud)

javascript svg

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

JEdi​​table-重置值

我可能错过了一件容易的事,但是我找不到在JEditable字段中“重置”值的方法。我让用户编辑三个字段,然后按一个按钮将这三个字段保存在一起。这可以正常工作,但是一旦完成,我想重置jEditable字段,使它们没有值并再次显示其占位符。用户输入的三个值显示在其他位置。

我试图做$("#myfield").editable('reset'),但这没用。

我发现的唯一方法是调用.empty()这些字段,并使用回调函数和设置再次将.editable设置为一遍,但是我发现这有点混乱。

还有其他方法吗?

根据要求,这是 Fiddle中我想做的一个例子

谢谢!

jquery jeditable

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

标签 统计

javascript ×2

xml ×2

java ×1

jeditable ×1

jquery ×1

magento ×1

php ×1

session ×1

svg ×1

validation ×1

xsd ×1