小编div*_*ivB的帖子

XSD验证错误:元素'{http://www.example.com}范围':不期望此元素.预计是(范围)

我创建了以下XSD(使用Eclipse):

  <?xml version="1.0" encoding="UTF-8"?>
  <schema targetNamespace="http://www.example.com" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.com">
    <element name="Make">
      <complexType>
        <sequence>
          <element name="Scope"></element>
        </sequence>
      </complexType>
    </element>
  </schema>
Run Code Online (Sandbox Code Playgroud)

并使用这个简单的XML进行验证

  <?xml version="1.0"?>
  <Make xmlns="http://www.example.com">
    <Scope>
    </Scope>
  </Make>
Run Code Online (Sandbox Code Playgroud)

得到:

  xmllint.exe --noout --schema sources.xsd sources.xml
  sources.xml:3: element Scope: Schemas validity error : Element '{http://www.example.com}Scope': This element is not expected. Expected is ( Scope ).
  sources.xml fails to validate
Run Code Online (Sandbox Code Playgroud)

在我看来,这必须是正确的:XML文件位于名称空间http://www.example.com(验证器说的也是).

对于XSD,我将默认命名空间设置为XSD模式(这是Eclipse所做的,所以它应该是正确的!)并且我给出了正确的targetNamespace.我也试过用

<element name="tnd:Scope" />
Run Code Online (Sandbox Code Playgroud)

但是,这也不起作用.

这是xmllint中的错误还是问题出在哪里?

关于divB

xml validation schema xsd xmllint

8
推荐指数
1
解决办法
6087
查看次数

允许后台应用程序设置不同进程的前台窗口

首先,我知道这是一个有争议的讨论,但我希望我们能保持这种技术.

我有一个在后台启动的应用程序,我不知何故希望它能够激活/带来在不同的进程中聚焦窗口.但是,即使我要激活其窗口的进程调用了AllowSetForegroundWindow(ASFW_ANY),调用SetForegroundWindow总是会失败.

原因是(IMO)启动应用程序是后台进程,并且由于它没有收到输入,因此不允许设置前台窗口.所以一切都出现在任务列表中,但没有显示.

所以我尝试创建一个虚拟窗口来接收输入,该输入随意关闭,然后能够成功调用SetForegroundWindow.但即使是我显示的虚拟窗口也会在后台显示.

但是,如果我打电话

AttachThreadInput(
    GetWindowThreadProcessId(GetForegroundWindow(), NULL),
    GetCurrentThreadId(), TRUE);
Run Code Online (Sandbox Code Playgroud)

创建虚拟窗口前,在前景确实是创建的窗口,我可以以后在不同的进程,其作品叫SetForegroundWindow一个不同的HWND.

但是:如果我不创建虚拟窗口,尽管我使用AttachThreadInput,SetForegroundWindow仍然返回零.

我不明白为什么如果我创建一个自己的Window(并且之后成功为其他窗口),AttachThreadInput hack成功,但如果我不首先创建自己的窗口则不成功.

我的后台进程如何在创建虚拟窗口的情况下在不同进程中的另一个窗口上调用SetForegroundWindow ?

[*]后台应用程序实际上是gpg-agent.exe,只要请求密码,就会调用pinentry.exe(我的应用程序).pinentry.exe(作为后台进程运行)必须从另一个正在运行的应用程序请求密码,因此它必须将其窗口置于前台...

winapi setforegroundwindow

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

修复标记版本中的错误(颠覆)

我们使用SVN进行版本控制.主要开发在主干中完成,并且在适用于每个用户的情况下创建分支(当预期的更改很复杂时).

有时,测试版本会被标记(例如/tags/v0.4).

但是,可能会发生严重错误在干线中某些时候被修复(在其他开发期间).

现在我想创建一个标签/tags/v0.41,它与/tags/v0.4相同,但只修复了这个严重错误(可能存在多个严重错误,但肯定不是来自主干的所有内容).

我如何处理TortoiseSVN?

我会建议这样的事情:

  1. svn copy/tags/v0.4/tags/v0.41创建一个branch(),
  2. 将适用的更改从trunk合并到/tags/v0.41并提交.

但这是一个好主意吗?

如何从特定主干修订(以及其他任何内容)到/tags/v0.41进行合并事实上,这不再是一个标签,而是一个不太好的分支......

svn version-control tortoisesvn merge branching-and-merging

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

ECDSA使用OpenSSL签名,使用Crypto ++进行验证

我在Wei Dai的Crypto ++应用程序中创建了一个ECDSA密钥对(secp128r1).签名和验证按预期工作.我没有将消息本身添加到签名中以最小化签名长度(正好是32字节).

但是,当我使用openssl创建签名时:

$ cat test.txt | openssl dgst -ecdsa-with-SHA1 -sign sample.key -keyform DER > act.bin
Run Code Online (Sandbox Code Playgroud)

OpenSSL显然将消息本身放到签名上,从而产生更大的签名(例如39字节).如果我设置,我可以使用Crypto ++验证签名CryptoPP::SignatureVerificationFilter::PUT_MESSAGE.

我是否可以告诉OpenSSL签署一条消息而不将消息放入签名,以便生成的签名完全是32字节?

c++ openssl cryptography crypto++ ecdsa

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

检查*output*节点是否已存在

我想根据以下规则将两个文件A.xml和map.xml与"Node"元素合并(节点由@Name区分):

  1. 如果map.xml中的元素具有Src属性,则应将map中的元素复制到输出
  2. 如果元素存在于A和map中且没有@Src,则应从A复制
  3. 如果元素存在于A但不存在于map中,则应忽略该元素(带警告)
  4. 如果元素存在于map中但不存在于A中,则应生成(empty)元素

例:

map.xml:

<?xml version="1.0"?>

<Node Name="ParentNode">
    <Node Name="Child1" Src="Child1/"/>
    <Node Name="Child2" Src="Child2/"/>
    <Node Name="Child3" Src="Child3/"/>

    <Node Name="Child4">
        <Node Name="Child4_Sub1" />
        <Node Name="Child4_Sub2" Src="Child4_Sub2/"/>
    </Node>

    <Node Name="Child5" />
</Node>
Run Code Online (Sandbox Code Playgroud)

A.XML:

<Node Name="ParentNode">
    <Node Name="Child4">
        <Node Name="Child4">
            <Node Name="Child4_Sub1">
                <!-- Here are many other elements -->
            </Node>
        </Node>
    </Node> 
    <!-- Here are many other elements -->
    <Node Name="Child1">
        <!-- Here are many other elements -->
    </Node>
    <!-- Here are many other elements -->

    <Node Name="ChildFoo">
        <!-- Here …
Run Code Online (Sandbox Code Playgroud)

xml xslt

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

带 ECC 的串行密钥

我想要(或创建)基于椭圆密钥加密的序列密钥。我想做的是将信息编码在序列中,这些信息可以公开验证,但只能由我创建。最初的想法来自http://www.ssware.com/cryptolicensing/cryptolicensing_net.htm,他们可以在其中创建信息加密的连续剧。然而,这是基于 RSA 导致的大量数字。因此我想自己构建类似的东西。

然后我发现: http: //www.codeguru.com/cpp/cpp/algorithms/general/article.php/c12799/Product-Keys-Based-on-Elliptic-Curve-Cryptography.htm

然而,我认为这没有任何好处:他们选择应用程序和创建者需要知道的域参数。公钥用于加密(生成序列号),而私钥位于应用程序中并用于解密。然而,知道了域参数和私钥,很容易推导出 ECIES 的公钥,对吗?

下一个想法是对信息进行任意编码,并向其附加基于 ECDSA 的签名。但这会导致序列号很大。

我真正寻找的是一个类似于http://ellipter.com 的解决方案,他们使用正确的概念:生成序列的私钥和验证它们的公钥。屏幕截图中显示的密钥非常短:对于 128 位密钥,只有大约 30 个字符。

这样做的正确方法是什么?我是否错过了正确的方案?不可能是 ECDSA,也不可能是 ECIES。但还有什么?

security cryptography code-access-security elliptic-curve

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

Windows API:在屏幕显示上写入屏幕

我正在写一个(非常)小的应用程序,它只是在开始时执行一些小的操作,应该在屏幕上写一条消息,类似于屏幕显示:大字母,没有任何窗口,高于一切,可见一段时间和然后逐渐消失.

如果可能的话我不想为它创建一个窗口.

这样做的正确方法是什么?

(我希望没有像DirectX这样的特殊工具包,需要直接图形访问等)

windows winapi screen

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